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

关于主键和插入的简单mysql问题,mysql,insert,primary-key,Mysql,Insert,Primary Key,在mysql中,当插入操作自动递增时,如何获取用于插入操作的主键 基本上,我希望在语句完成时返回新的自动递增值 谢谢 MySQL的MySQL文档描述了该功能:[从表名称中选择max(主键列名称)] 啊,不一定。我不是一个MySQL的家伙,但是有一种特定的方法可以为最后一个完成的操作获取最后一个插入的id,它比这个更健壮。如果在写入表和查询表之间发生了插入,该怎么办?我知道这件事,因为它在很多月前就刺痛了我(所以是的,它确实发生了)。 如果所有其他操作都失败,请阅读手册:您的澄清意见表示,您有兴趣

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

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


谢谢

MySQL的

MySQL文档描述了该功能:

[从表名称中选择max(主键列名称)] 啊,不一定。我不是一个MySQL的家伙,但是有一种特定的方法可以为最后一个完成的操作获取最后一个插入的id,它比这个更健壮。如果在写入表和查询表之间发生了插入,该怎么办?我知道这件事,因为它在很多月前就刺痛了我(所以是的,它确实发生了)。
如果所有其他操作都失败,请阅读手册:

您的澄清意见表示,您有兴趣确保最后一次插入的ID()不会在另一次并发插入时给出错误的结果。请放心,使用LAST_INSERT_ID()是安全的,无论其他并发活动如何。LAST_INSERT_ID()仅返回当前会话期间生成的最新ID

你可以自己试试:

  • 打开两个shell窗口,运行mysql 每个客户端中的客户端,并连接到 数据库
  • Shell 1:插入到具有 自动递增键
  • Shell 1:选择最后一个插入ID(), 见结果
  • Shell 2:插入到同一个表中
  • Shell 2:选择最后一个插入ID(), 请参见与shell 1不同的结果
  • Shell 1:选择最后一个\u插入\u ID() 再次,请参见前面的重复 结果

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

    说明:代码有一个insert then last_insert_ID。其中两个语句几乎同时执行,执行顺序变成insert#1 insert#2 last_insert_ID#1完成并从insert#2 last_insert_ID#2返回ID完成并返回insert中的id#2会发生这种情况吗?@Bill Karwin thx非常感谢这篇有用的帖子。问题:假设在多线程环境中,最后一个可用的Auto inc键值是10。。然后外壳1的螺纹无法插入,同时外壳2正在插入。。最后一个_insert_id()是什么?11还是12?thx alot@shadesco:取决于您的MySQL版本,但在5.1及更高版本的InnoDB中,第一个会话将增加auto inc,该值将丢失。然后第二节课将得到12分。看见