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

时间:2008-10-03 00:07:26

标签: mysql insert primary-key

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

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

谢谢!

4 个答案:

答案 0 :(得分:12)

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

您可以自己尝试一下:

  1. 打开两个shell窗口,运行mysql 每个客户端并连接到 数据库中。
  2. Shell 1:INSERT到一个表中 AUTO_INCREMENT键。
  3. Shell 1:SELECT LAST_INSERT_ID(), 见结果。
  4. Shell 2:INSERT到同一个表中。
  5. Shell 2:SELECT LAST_INSERT_ID(), 看到与shell 1不同的结果。
  6. Shell 1:SELECT LAST_INSERT_ID() 再次,看到前面的重复 结果
  7. 如果你考虑一下,这是唯一有意义的方法。支持自动递增密钥机制的所有数据库都必须采用这种方式。如果结果取决于竞争条件,而其他客户端可能同时进行INSERT,那么在当前会话中没有可靠的方法来获取最后插入的ID值。

答案 1 :(得分:6)

MySQL的 LAST_INSERT_ID()

答案 2 :(得分:0)

MySQL Docs描述了函数:LAST_INSERT_ID()

答案 3 :(得分:0)

[从table_name中选择max(primary_key_column_name)] 啊,不是nessecarily。我不是一个MySQL人,但有一些特定的方法可以获得最后一个完成的动作的最后一个插入ID,它比这更健壮。如果在您写入表格和查询之间发生了插入,该怎么办?我知道,因为它在许多月前蜇了我(所以它确实发生了)。 如果所有其他方法都失败,请阅读手册:http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html