有关主键和插入的简单mysql问题

时间:2020-03-06 15:03:25  来源:igfitidea点击:

在mysql中,当它是自动递增时,如何获取用于插入操作的主键。

基本上,我希望在语句完成时返回新的自动增量值。

谢谢!

解决方案

MySQL的LAST_INSERT_ID()

MySQL文档描述了该函数:LAST_INSERT_ID()

[从表名称中选择max(primary_key_column_name)]
没必要。我不是MySQL专家,但是有一些特定的方法可以为最后完成的操作获取最后插入的ID,但比这要健壮得多。如果在写入表和查询表之间发生插入,该怎么办?我知道,因为它在许多月前刺痛了我(是的,它的确发生了)。
如果其他所有方法均失败,请阅读手册:http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

澄清评论说,我们有兴趣确保在发生另一个并发INSERT时LAST_INSERT_ID()不会给出错误的结果。请放心,无论其他并行活动如何,使用LAST_INSERT_ID()都是安全的。 LAST_INSERT_ID()仅返回当前会话期间生成的最新ID。

我们可以自己尝试:

  • 打开两个外壳程序窗口,在每个窗口中运行mysql客户端并连接到数据库。
  • Shell 1:使用AUTO_INCREMENT键插入到表中。
  • Shell 1:SELECT LAST_INSERT_ID(),请参见结果。
  • Shell 2:将INSERT插入同一表中。
  • Shell 2:SELECT LAST_INSERT_ID(),请参见与Shell 1不同的结果。
  • Shell 1:再次选择LAST_INSERT_ID(),请参见前面结果的重复。

如果我们考虑一下,这是唯一有意义的方法。所有支持自动递增密钥机制的数据库都必须采用这种方式。如果结果取决于与其他客户端可能同时插入的竞争条件,那么将没有可靠的方法来获取当前会话中最后插入的ID值。