2013-07-22 245 views
0

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

如果函数处于轻量级流量中,但没有看到问题,但是当它的负载越来越重时,我可以看到一个潜在的错误:假设我插入了一行,并且数据库的AI值为1,提取函数开始请求“最新插入的行”,另一行插入AI值2.现在,如果插入1的提取函数运行,则将提取第2行。我知道时间差距需要非常小才能让这个错误真正存在,但是有没有更好的方法来获取正确的行,同时保持表中只有PK作为唯一列? (我不希望实现一个额外的校验列,但我看不出这是一个潜在的解决方案。)

+1

'SELECT LAST_INSERT_ID();'参见[这里](HTTP ://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html) –

回答

3

它不是很合逻辑,但你可以:

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

相反,你应该只SELECT LAST_INSERT_ID();的于尔根·d建议和重复使用其他数据

+1

谢谢!正是我想要的!现在我再次过上幸福的生活。 –

0

请仔细阅读本PHP函数mysqli_insert_id()

抱歉上面的,我傻傻的以为你是使用PHP。 MySQL还有一个本地的LAST_INSERT_ID()函数。

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

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

+0

仅链接答案在这里被认为是低质量的。请扩大您的答案或留下评论。顺便说一句,你甚至不知道PHP是否在这里使用。 –

+0

Thanks @ amaster507,但是我们可以限制MySQL级别的答案吗? –

+0

@juergend对不起,我已经扩展了MySQL的功能,并提供了一个引用的引用,它比我自己更好地解释它。 – amaster