代码之家  ›  专栏  ›  技术社区  ›  user2693928

MySQL 100%get last insert id last_insert_id();

  •  2
  • user2693928  · 技术社区  · 6 年前

    MySQL有 LAST_INSERT_ID();

    但这并不安全:如果我运行一些查询,那么 LAST_INSERT_ID() 在两者之间执行另一个查询时,我可能会得到错误的id。

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

    有没有安全的方法来获得我想要的100%的ID?

    谢谢

    2 回复  |  直到 6 年前
        1
  •  2
  •   balakrishnan    6 年前

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

    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 每个连接 模型。

        2
  •  -2
  •   LDS    6 年前

    使用SELECT Max(ID)FROM table是否比使用SELECT last\u insert\u ID()更安全,后者作为两个独立的查询运行? 所以你可以从MAX(ID)那里得到最后一条记录