首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mysql 是如何保证在高并发的情况下autoincrement关键字修饰的列不会出现重复

mysql 是如何保证在高并发的情况下autoincrement关键字修饰的列不会出现重复

作者头像
Theone67
发布2019-11-21 17:01:49
发布2019-11-21 17:01:49
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

转载自 https://juejin.im/book/5bffcbc9f265da614b11b731/section/5c42cf94e51d45524861122d#heading-8 mysql实现这个机制的背后,主要有两种方式

  1. 采用 AUTO-INC 锁,也就是在执行插入语句时,就在表级别上加一个AUTO-INC锁。然后,为每条待插入记录的AUTO_INCREMENT修饰的列分配递增的值。在该语句执行完成之后,再把AUTO-INC锁释放掉。需要注意的是,在释放锁的时候,不同于一般情况下的读锁和写锁,是在事务执行完成之后自动释放锁。AUTO-INC锁是在当前语句插入完成之后释放的。
  2. 采用一个轻量级的锁,在为插入语句生成AUTO_INCREMENT修饰的列分配递增的值时获取该锁,在数值分配完成后就释放该锁。所以采用这种方式的话,必须清楚该插入语句具体的插入数量。同时,这种方式避免锁表,所以,效率较高。

我们可以执行

代码语言:javascript
代码运行次数:0
运行
复制
SHOW VARIABLES LIKE '%innodb_autoinc_lock_mode%';

这条sql语句,查看我们本地的mysql数据库服务器是采用的那种方式 若值为0,AUTO-INC锁方式; 若值为1,轻量级锁方式; 若值为2,两种方式混着来(就是插入记录数量确定的情况下使用轻量级锁,不确定时采用AUTO-INC锁方式)。

tips: 采用轻量级锁时,可能会造成不同事务中,插入语句生成的数值是交叉的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-06-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档