Mysql获取刚刚插入的行

时间:2013-07-22 21:43:15

标签: mysql insert row primary-key fetch

所以我正在设计一个在MySQL数据库中插入一行的函数。该表具有启用了自动增量的主键。所以我不插入此列的值。但PK是整个表中唯一的唯一列。如何获取刚刚插入的行?

如果功能处于轻量级流量状态,我没有看到问题,但是当它的负载越来越重时,我可以看到一个潜在的错误:说我插入一行并且DB的AI值为1,然后在fetch函数开始请求“最新插入的行”,另一行插入AI值2.现在,如果插入1的获取功能运行,将获取第2行。我知道时间间隔需要很小才能让这个bug真正存在,但有没有更好的方法来获取正确的行,同时保持表只有PK作为唯一列? (我不想实现额外的校验和列,但我认为这是一个潜在的解决方案。)

2 个答案:

答案 0 :(得分:3)

它不合逻辑,但你可以:

insert into `table1` (`column1`,`column2`,`column3`) VALUES ("value1","value2","value3");
select * from `table1` where `PK`=LAST_INSERT_ID();

相反,你应该只是SELECT LAST_INSERT_ID();作为jurgen d建议并重用其他数据

答案 1 :(得分:0)

请阅读此php函数mysqli_insert_id()

对于上述内容感到抱歉,我愚蠢地认为你使用的是php。 MySQL还有一个原生的LAST_INSERT_ID()函数。

  

生成的ID基于每个连接在服务器中维护。这意味着函数返回给定客户端的值是为该客户端影响AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENTvalue。此值不受其他客户端的影响,即使它们生成自己的AUTO_INCREMENT值。此行为可确保每个客户端都可以检索自己的ID,而无需关心其他客户端的活动,也无需锁定或事务。

参考; http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_last-insert-id