MySQL具有LAST_INSERT_ID();
函数,该函数可获取最后的插入内容。
但这并不安全:如果我运行一些查询,然后得到LAST_INSERT_ID()
,并且在两个查询之间执行,我会得到错误的ID。
这可能会在使用相同连接或使用pconnect(多个用户的持久连接)的多个线程中发生
是否有一种安全的方法来获取我想要100%的ID?
谢谢
答案 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)获取最后一条记录