mysql - 后跟 SELECT LAST_INSERT_ID 时 INSERT 不起作用

标签 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 它自己的作品 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/

相关文章:

mysql - 在 mySQL 中计算诊所患者预约日期之间的时间间隔

Mysql在存储过程中使用LAST_INSERT_ID

php - laravel 原始查询 last_insert_id

mysql - 不在 join/where 查询中选择重复项

php - PDO 绑定(bind)参数不起作用

MySQL - 基于多态表值的条件查询结果?

php - MySQL SQL_INSERT_ID() 和 LAST_INSERT_ID 不起作用

mysql - 如果最终依赖于操作系统,数据库如何保证持久性?

mysql - 用户输入位置 - 如何循环包含路线的数据库

php - 在一页中显示所有用户帖子,但查询速度太慢