前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自增id用完了怎么办

自增id用完了怎么办

作者头像
用户7447819
发布2021-07-23 14:27:45
9820
发布2021-07-23 14:27:45
举报
文章被收录于专栏:面试指北面试指北

自增id用完了怎么办

阅读本文大概需要2分钟

1. 表定义自增id

我们通常会把主键设置成自增id,主键id的最大值是

2^{64} - 1

(bigint unsigned)。如果主键id用完了的话,再次插入的时候会报错

Duplicate entry for key 'PRIMARY'

2. InnoDB系统自增row_id

如果创建的表使用InnoDB引擎,但是没有指定主键的话。InnoDB会创建一个不可见,长度为6个字节的row_id。

InnoDB维护了一个全局变量dict_sys.row_id,所有无主键的InnoDB表,每插入一行数据,会将当前时刻的dict_sys.row_id 赋值给row_id,然后自增1。

row_id 的上限是

2^{48} - 1

,row_id 达到上限后,会归0,然后重新循环,则新插入的数据会覆盖之前的数据(如果row_id一致)。

3. InnoDB trx_id

trx_id, 事务id。InnnoDB内部维护max_trx_id全局变量,每次申请trx_id 获取当前的max_trx_id 然后会将max_trx_id 加1。

每一行数据会记录更新它的trx_id, MVCC的实现原理就是根据当前的trx_id 和数据持有的trx_id 做比较来判断数据是否可见。

max_trx_id 的上限是

2^{48} - 1

,如果达到上限后就会归0, 那么之后的查询操作会出现脏读。

4. thread_id

线程id,系统有一个全局变量thread_id_counter, 新建连接之后会将当前的thread_id_counter赋值给新建的连接。

thread_id_counter的上限是

2^{32} - 1

, 达到上限后会重置为0。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 面试指北 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自增id用完了怎么办
    • 1. 表定义自增id
      • 2. InnoDB系统自增row_id
        • 3. InnoDB trx_id
          • 4. thread_id
          相关产品与服务
          云数据库 SQL Server
          腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档