Mysql如何确保主键自我增加是线程安全的?

问题描述 投票:0回答:1

与两个事务并发的插入行元组未指定主键ID,后者是自增加的

Mysql如何确保使用不同的主键ID顺利插入两个事务?

如果可能的话,我希望能够回答插入语句的执行过程,包括插入有意锁,确保主键ID不冲突,以及插入完成后保持的锁。

java mysql
1个回答
4
投票

基本上与任何其他线程安全代码的工作方式相同:通过创建critical section of code,因此只有一个线程可以访问增加给定表的自动增量值,除非它首先获取特殊类型的表锁。

它是一个持续时间非常短的锁,只能增加表的自动增量值。然后释放锁,允许另一个线程以线程安全的方式执行相同的操作。

锁定也是每个表,不像传统的关键部分代码实现,它通常使用围绕特定代码段的全局互斥锁。

有一些选项可以控制如何在InnoDB中获取和释放故事锁。您可能想阅读https://dev.mysql.com/doc/refman/8.0/en/innodb-auto-increment-handling.html

© www.soinside.com 2019 - 2024. All rights reserved.