有很多关于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,DB 是 Amazon 的 RDS MySQL。当我使用 Python 的 MySQLdb 模块时会发生同样的问题。
理想情况下,我想插入行,取回它的 ID 以供将来识别和使用。
最佳答案
您应该一次运行一个查询。大多数 SQL 接口(interface)不允许多重查询。
MySQL 允许单个查询以 ;
结束,但如果 ;
后面有任何单词(注释除外),则为语法错误,将使整个请求失败。所以 INSERT 也不会运行。
MySQL 确实有一个允许多查询的连接选项,但默认情况下它是不活动的。参见 https://dev.mysql.com/doc/refman/8.0/en/c-api-multiple-queries.html
确实没有理由使用多查询。只需将 SELECT LAST_INSERT_ID()
作为单独的查询运行在 INSERT
之后。只要您使用相同的连接,它就会给您正确的答案。
关于mysql - 后跟 SELECT LAST_INSERT_ID 时 INSERT 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55053806/