MySQL 100%获得最后一个插入ID LAST_INSERT_ID();

时间:2018-10-05 05:12:18

标签: mysql

MySQL具有LAST_INSERT_ID();函数,该函数可获取最后的插入内容。

但这并不安全:如果我运行一些查询,然后得到LAST_INSERT_ID(),并且在两个查询之间执行,我会得到错误的ID。

这可能会在使用相同连接或使用pconnect(多个用户的持久连接)的多个线程中发生

是否有一种安全的方法来获取我想要100%的ID?

谢谢

2 个答案:

答案 0 :(得分:2)

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

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')

尝试一下,因为我们有事务处理语句,但是它不能确保多线程环境中的值。

链接Mysql thread safety of last_insert_id解释了该链接将基于每个连接模型工作。

答案 1 :(得分:-1)

使用SELECT Max(ID)FROM表是否比使用SELECT last_insert_id()安全,因为它们在两个单独的查询中运行? 根据您的问题,表必须具有主键。 这样您就可以从MAX(ID)获取最后一条记录