关于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以供将来标识和使用。
答案 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
作为一个单独的查询。只要您使用相同的连接,它就会为您提供正确的答案。