8

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

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

谢谢!

4

4 回答 4

12

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

你可以自己试试:

  1. 打开两个 shell 窗口,在每个窗口中运行 mysql 客户端并连接到数据库。
  2. Shell 1:使用 AUTO_INCREMENT 键插入到表中。
  3. 外壳 1:选择 LAST_INSERT_ID(),查看结果。
  4. Shell 2:插入到同一个表中。
  5. Shell 2:SELECT LAST_INSERT_ID(),查看与 shell 1 不同的结果。
  6. Shell 1: SELECT LAST_INSERT_ID() 再次,查看先前结果的重复。

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

于 2008-10-03T00:42:32.550 回答
6

MySQL 的LAST_INSERT_ID()

于 2008-10-03T00:11:59.627 回答
0

MySQL Docs 描述了该函数:LAST_INSERT_ID()

于 2008-10-03T00:15:13.927 回答
-1

[从 table_name 中选择 max(primary_key_column_name)] 啊,没必要。我不是 MySQL 人,但有一些特定的方法可以为最后完成的操作获取最后插入的 id,这些方法比这更强大。如果在您写入表和查询它之间发生了插入怎么办?我知道是因为它在很多个月前刺痛了我(所以它确实发生了)。如果一切都失败了阅读手册:http ://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

于 2008-10-03T00:17:57.490 回答