所以我正在设计一个在MySQL数据库中插入一行的函数。该表具有启用了自动增量的主键。所以我不插入此列的值。但PK是整个表中唯一的唯一列。如何获取刚刚插入的行?
如果功能处于轻量级流量状态,我没有看到问题,但是当它的负载越来越重时,我可以看到一个潜在的错误:说我插入一行并且DB的AI值为1,然后在fetch函数开始请求“最新插入的行”,另一行插入AI值2.现在,如果插入1的获取功能运行,将获取第2行。我知道时间间隔需要很小才能让这个bug真正存在,但有没有更好的方法来获取正确的行,同时保持表只有PK作为唯一列? (我不想实现额外的校验和列,但我认为这是一个潜在的解决方案。)
答案 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