mysql 100%get last insert id last_insert_id();

7uzetpgm  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(311)

mysql有 LAST_INSERT_ID(); 获取最后一次插入的函数。
但这并不安全:如果我运行一些查询,那么 LAST_INSERT_ID() 在两者之间执行另一个查询时,我可能会得到错误的id。
这可能发生在使用同一连接的多个线程中,或者使用pconnect(多用户的持久连接)
有没有安全的方法来获得我想要的100%的id?
谢谢

e5nszbig

e5nszbig1#

在以下情况下,存储程序可能会有所帮助:

Create table test (id int AUTO_INCREMENT primary key, name varchar(50) )

存储过程为:

delimiter $$
DROP PROCEDURE IF EXISTS InserData$$
CREATE PROCEDURE InserData(IN _Name VARCHAR(50))
BEGIN
    START TRANSACTION;
    INSERT INTO test(name) VALUES (_Name);
    SELECT LAST_INSERT_ID() AS InsertID;
    COMMIT;
END

使用调用存储过程

CALL InserData('TESTER')

尝试一下,因为我们有事务语句,但它不能确保在多线程环境中的价值。
最后一个插入id的链接mysql线程安全性解释了它将基于每个连接模型工作。

4uqofj5v

4uqofj5v2#

使用select max(id)from table是否比使用select last\u insert\u id()更安全,后者作为两个独立的查询运行?根据您的问题,表必须有一个主键。所以你可以从max(id)那里得到最后一条记录

相关问题