insert into tbl(name)values('john'),('bale'),('ron')
如果一个人运行此查询并且世界其他地方的另一个人运行
insert into tbl(name)values('johnny'),('baleton'),('ronny')
在服务器上的上一次查询后几秒但在完成之前。 Wil插入的值是连续的吗?喜欢这个
'john','bale','ron','johnny','baleton','ronny'
或者tbl
可能不是id|name
列。
答案 0 :(得分:3)
我相信MySQL中的每个查询都发生在单个事务中(如果启用了自动提交)。如果您自己管理您的交易,那么情况就更加明显了。 我相信由于这个原因,记录将按顺序插入。
修改强>
我认为这完全是关于autoincrement
,否则问题没有意义,正如原始问题的评论所解释的那样。
我的立场得到了纠正。 doc states:
When accessing the auto-increment counter, InnoDB uses a special table-level AUTO-INC lock that it keeps to the end of the current SQL statement, not to the end of the transaction.
所以是的,仍然有序。不适用于事务范围,而是单个SQL语句。
答案 1 :(得分:0)
MySQL(至少使用InnoDB引擎)将下一个Auto Increment值(ai_max + ai_increment)分配给读取INSERT表的第一个语句(非事务)。因此,如果出现另一个语句,尝试INSERT,并在第一个语句之前完成,它将获得NEXT AI值(ai_max + 2 * ai_increment),而不是分配给第一个语句的值。
这与数据库得到的“按顺序”一样。
有关MySQL InnoDB自动增量的更多信息,请参阅the MySQL developer's reference