INSERT 后跟 SELECT LAST_INSERT_ID 不起作用
INSERT doesn't work when followed by SELECT LAST_INSERT_ID
有很多关于LAST_INSERT_ID()
的问题
就我而言,问题是:
当 INSERT
后跟 SELECT LAST_INSERT_ID()
时,没有插入记录
INSERT INTO sequences (state) VALUES (0);
select LAST_INSERT_ID();
>>> 80 // nothing is added to DB
INSERT
靠自己的作品OK
INSERT INTO sequences (state) VALUES (0);
>>>
select LAST_INSERT_ID();
>>> 81 // row is inserted
为了测试我使用的是SequelPro,数据库是亚马逊的RDS MySQL。当我使用 Python 的 MySQLdb 模块时发生同样的问题。
理想情况下,我想插入行,取回它的 ID 以供将来识别和使用。
你应该运行一次查询一个。大多数 SQL 接口不允许多重查询。
MySQL 允许单个查询由 ;
终止,但如果 ;
后面有任何单词(注释除外),则为语法错误,这将使整个请求失败。所以 INSERT 也不会 运行。
MySQL 确实有允许多查询的连接选项,但默认情况下未激活。参见 https://dev.mysql.com/doc/refman/8.0/en/c-api-multiple-queries.html
确实没有理由使用多查询。只是 运行 SELECT LAST_INSERT_ID()
作为 INSERT
之后的单独查询。只要您使用相同的连接,它就会给您正确的答案。
有很多关于LAST_INSERT_ID()
就我而言,问题是:
当 INSERT
后跟 SELECT LAST_INSERT_ID()
时,没有插入记录
INSERT INTO sequences (state) VALUES (0);
select LAST_INSERT_ID();
>>> 80 // nothing is added to DB
INSERT
靠自己的作品OK
INSERT INTO sequences (state) VALUES (0);
>>>
select LAST_INSERT_ID();
>>> 81 // row is inserted
为了测试我使用的是SequelPro,数据库是亚马逊的RDS MySQL。当我使用 Python 的 MySQLdb 模块时发生同样的问题。
理想情况下,我想插入行,取回它的 ID 以供将来识别和使用。
你应该运行一次查询一个。大多数 SQL 接口不允许多重查询。
MySQL 允许单个查询由 ;
终止,但如果 ;
后面有任何单词(注释除外),则为语法错误,这将使整个请求失败。所以 INSERT 也不会 运行。
MySQL 确实有允许多查询的连接选项,但默认情况下未激活。参见 https://dev.mysql.com/doc/refman/8.0/en/c-api-multiple-queries.html
确实没有理由使用多查询。只是 运行 SELECT LAST_INSERT_ID()
作为 INSERT
之后的单独查询。只要您使用相同的连接,它就会给您正确的答案。