0

当2个查询同时开始并插入多行时,是否保证id会相邻?例如查询 1 插入行 a、b、c 查询 2 - 行 c、d、e。查询 1 完成并报告 insertId 为 1,这是否总是意味着插入行 a 的 id 为 1、b - 2、c - 3,或者可能 a 的 id 为 1,但 c 的 id 为 2?

4

1 回答 1

0

显然 InnoDB 是这样的:

当访问自增计数器时,InnoDB 使用一个特殊的表级 AUTO-INC 锁,它保持到当前 SQL 语句的末尾,而不是事务的末尾。引入了特殊的锁释放策略来提高插入包含 AUTO_INCREMENT 列的表的并发性。然而,两个事务不能同时在同一张表上拥有 AUTO-INC 锁,如果 AUTO-INC 锁被长时间持有,这可能会对性能产生影响。对于诸如 INSERT INTO t1 ... SELECT ... FROM t2 之类的语句,可能就是这种情况,它将一个表中的所有行插入到另一个表中。

http://dev.mysql.com/doc/refman/5.6/en/innodb-auto-increment-traditional.html

不确定myisam

于 2013-10-21T11:21:02.800 回答