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 之后的单独查询。只要您使用相同的连接,它就会给您正确的答案。