首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql如何保证主键自增是线程安全的?

Mysql如何保证主键自增是线程安全的?
EN

Stack Overflow用户
提问于 2019-04-21 22:56:24
回答 1查看 84关注 0票数 0

并发于两个事务的插入行元组没有指定主键id,主键id是自增的。

Mysql如何确保两个具有不同主键ids的事务顺利插入?

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

EN

回答 1

Stack Overflow用户

发布于 2019-04-21 23:03:38

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

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

该锁也是按表的,这与临界区代码的传统实现不同,临界区代码的传统实现通常在特定代码段周围使用全局互斥。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55783827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档