繁体   English   中英

MySQL多行插入是否会获取顺序自动增量ID?

[英]Does a MySQL multi-row insert grab sequential autoincrement IDs?

我认为这是事实,但我没有在网上找到任何确认信息。 我可以使用last_insert_id()获取为自动增量字段生成的第一个id,但是我可以假设下一个记录将具有顺序ID吗? 或者其他用户是否可以获取ID,以便生成的ID不是连续的?

示例:插入mytable(asdf,qwer)值(1,2),(3,4),(5,6),...,(10000,10001);

如果mytable有一个自动增量列,并且如果两个用户同时运行此语句,一个用户将获取10000个连续ID,而另一个用户将获得下一个10000个连续ID吗? 数百名用户怎么样?

谢谢。

这取决于使用的存储引擎。

  • MyISAM保证插入的行具有顺序ID,因为在插入期间保持表级锁定。
  • InnoDB :除非innodb_autoinc_lock_mode设置为interleaved(2) ,否则插入的行将具有顺序ID。 默认情况下,InnoDB在5.1和traditional模式之前以consecutive模式运行。

有关innodb_autoinc_lock_mode选项的更多信息,请参见13.6.4.3。 AUTO_INCREMENT在InnoDB中处理

如果您使用LOCK TABLES,批次应该获取顺序ID。

例:

LOCK TABLES users WRITE;
<BULK INSERT HERE>
UNLOCK TABLES;

这将防止多个线程同时写入表。

多行插入只是一个批量操作,一遍又一遍地执行相同的操作。 触发insert语句时,它会触发生成ID的触发器。

因此,如果使用数据库引擎,则以顺序方式执行其所有工作(队列类似 - 先进先出)然后是,顺序id将比前一个id高一个增量; 如果以并行方式触发语句的多线程方式插入数据,则不会在“随机”中给出id。

我不知道有任何mysql引擎可以保证这一点,但是我再也没有对这个特定的主题进行过多的研究。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM