MySQL 和自动增量一致性
Posted
技术标签:
【中文标题】MySQL 和自动增量一致性【英文标题】:MySQL and Autoincrement Consistency 【发布时间】:2012-04-12 16:45:29 【问题描述】:我想在插入后立即获取表的自动增量 ID。 LAST_INSERT_ID() 应该可以工作,但它是 100% 完整的证明吗?这意味着如果在存储过程中同时执行两个语句,它将使用该上下文中的最后一个 ID,还是来自已建立的其他连接?
INSERT INTO foo (auto,text)
VALUES(NULL,'text'); # generate ID by inserting NULL
INSERT INTO foo2 (id,text)
VALUES(LAST_INSERT_ID(),'text'); # use ID in second table
【问题讨论】:
【参考方案1】:mysql 手册是这么说的
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
重要 如果使用单个 INSERT 语句插入多行,LAST_INSERT_ID() 返回为第一个插入的值生成的值 仅行。这样做的原因是为了让重现成为可能 很容易对其他服务器执行相同的 INSERT 语句。
LAST_INSERT_ID() 的值将在所有版本中保持一致 如果 INSERT 或 UPDATE 语句中的所有行都成功。
当前执行的语句不影响 LAST_INSERT_ID()。
如果前面的语句返回错误,则 LAST_INSERT_ID() 的值未定义。对于事务表,如果 语句由于错误而回滚,值为 LAST_INSERT_ID() 未定义。对于手动回滚,值 LAST_INSERT_ID() 不会恢复到事务之前的状态;它 保持在 ROLLBACK 时的状态。
所以是的,这是最好的方法,前提是您使用单个插入查询而不是分组查询
【讨论】:
以上是关于MySQL 和自动增量一致性的主要内容,如果未能解决你的问题,请参考以下文章