当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吗?
答案 0 :(得分: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