紧跟着SELECT LAST_INSERT_ID的INSERT不起作用

时间:2019-03-07 22:26:54

标签: mysql sql 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就可以了

INSERT INTO sequences (state)  VALUES (0);
>>>
select LAST_INSERT_ID();
>>> 81 // row is inserted

对于测试,我使用的是SequelPro,DB是Amazon的RDS MySQL。当我使用Python的MySQLdb模块时,也会发生相同的问题。

理想情况下,我想插入行,取回它的ID以供将来标识和使用。

1 个答案:

答案 0 :(得分:3)

您应该一次运行一个查询。大多数SQL接口不允许多个查询。

MySQL允许单个查询以;终止,但是如果;之后有任何单词(注释除外),则可能是语法错误,这将使整个请求失败。因此,INSERT也不会运行。

MySQL确实具有允许多查询的连接选项,但默认情况下处于禁用状态。参见https://dev.mysql.com/doc/refman/8.0/en/c-api-multiple-queries.html

确实没有理由使用多重查询。只需在SELECT LAST_INSERT_ID()之后运行INSERT作为一个单独的查询。只要您使用相同的连接,它就会为您提供正确的答案。