mysql 100%get last insert id last_insert_id();

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

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

8e2ybdfx

8e2ybdfx1#

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

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

存储过程为:

  1. delimiter $$
  2. DROP PROCEDURE IF EXISTS InserData$$
  3. CREATE PROCEDURE InserData(IN _Name VARCHAR(50))
  4. BEGIN
  5. START TRANSACTION;
  6. INSERT INTO test(name) VALUES (_Name);
  7. SELECT LAST_INSERT_ID() AS InsertID;
  8. COMMIT;
  9. END

使用调用存储过程

  1. CALL InserData('TESTER')

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

展开查看全部
ibrsph3r

ibrsph3r2#

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

相关问题