MySQL 的自增主键

0 前言

自增主键是数据库中最常用的功能之一,这里简单介绍一下 MySQL 自增主键的内部原理、加锁方式以及临界值的处理方式。

1 内部原理

  • 自增主键并不会固化存储,每次 MySQL Server 启动都会进行初始化,然后存储在内存中。
  • 每次 insert 之前就会对这个数字进行 +1。
  • 自增主键初始化的方式为 select max(max(id), 1) from table_name。

2 加锁方式

  • 互斥锁:如果是一个没有指定 id 的 insert 时,只会在获取 id 时对自增主键加一个互斥锁,锁很短。
  • 事务全程锁:如果是一个指定 id 的 insert,则会在 insert 事务提交后才释放锁,自增主键被锁的时间是整个事务执行的时间。
  • 如果使用了 insert into xxx select * from yyy; 或者 load file xxx;,则自增主键锁会持续到语句执行结束,会阻塞普通的 insert,是一个风险点。

3 临界值

  • 默认从 1 开始,当达到该类型的 MAX_VALUE 之后就会不再自增,如果还有新的 insert 进来,就会产生主键冲突异常。
  • 可以通过 alter table AUTO_INCREMENT=value; 来指定自增主键,但 value 只能为非负数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值