首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

线上MySQLid用尽怎么办?

作者:废柴程序员 链接:https://www.jianshu.com/p/a6bc14005b52 MySQLid都定义了初始值,然后不断加步长。...虽然自然数没有上限,但定义了表示这个数字节长度,计算机存储就有上限。比如,无符号整型(unsigned int)是4个字节,上限就是2^32 - 1。那id用完,会怎么样?...InnoDB系统row_id 若你创建InnoDB表未指定主键,则InnoDB会自动创建一个不可见,6个字节row_id。...所以应该在InnoDB表中主动创建主键:当表id到达上限后,再插入数据时会报主键冲突错误。 毕竟覆盖数据,就意味着数据丢失,影响数据可靠性;报主键冲突,插入失败,影响可用性。...因为MySQL使用了一个唯一数组 图片 给新线程分配thread_id逻辑: 图片 总结 每种id有各自应用场景,在达到上限后表现也不同: 表id达到上限后,再申请时它值就不会改变

3.9K20

线上MySQLid用尽怎么办?

MySQLid都定义了初始值,然后不断加步长。虽然自然数没有上限,但定义了表示这个数字节长度,计算机存储就有上限。...那id用完,会怎么样? 表定义增值id 表定义增值达到上限后逻辑是:再申请下一个id时,得到值保持不变。...InnoDB系统row_id 若你创建InnoDB表未指定主键,则InnoDB会自动创建一个不可见,6个字节row_id。...所以应该在InnoDB表中主动创建主键:当表id到达上限后,再插入数据时会报主键冲突错误。 毕竟覆盖数据,就意味着数据丢失,影响数据可靠性;报主键冲突,插入失败,影响可用性。...因为MySQL使用了一个唯一数组 给新线程分配thread_id逻辑: 总结 每种id有各自应用场景,在达到上限后表现也不同: 表id达到上限后,再申请时它值就不会改变,进而导致继续插入数据时报主键冲突错误

3.2K10
您找到你想要的搜索结果了吗?
是的
没有找到

线上MySQLid用尽怎么办?

MySQLid都定义了初始值,然后不断加步长。虽然自然数没有上限,但定义了表示这个数字节长度,计算机存储就有上限。...那id用完,会怎么样? 表定义增值id 表定义增值达到上限后逻辑是:再申请下一个id时,得到值保持不变。...InnoDB系统row_id 若你创建InnoDB表未指定主键,则InnoDB会自动创建一个不可见,6个字节row_id。...所以应该在InnoDB表中主动创建主键:当表id到达上限后,再插入数据时会报主键冲突错误。 毕竟覆盖数据,就意味着数据丢失,影响数据可靠性;报主键冲突,插入失败,影响可用性。...因为MySQL使用了一个唯一数组 给新线程分配thread_id逻辑: 总结 每种id有各自应用场景,在达到上限后表现也不同: 表id达到上限后,再申请时它值就不会改变

2K20

如果MySQL ID 用完了,怎么办?

既然有上限,就总有被用完时候,如果id用完了,怎么办呢?今天就一起来学习下吧。...id 说到id,相信你第一反应一定是在设计表结构时候自定义一个id字段,那么就有一个问题啦,在插入数据时有可能唯一主键冲、sql事务回滚、批量插入时候,批量申请增值等原因导致id...但是这个过程有脏读存在,那么这个id就不会是原子性,存在重复可能性。 thread_id 其实,线程 id 才是 MySQL 中最常见一种 id。...结果跟row_id一样,就会覆盖原有记录了。 上面介绍了几种MySQL自身一些id,其实,实际运用中,我们也可能会选择外部主键,然后持久化到数据库,以此来代替数据库自身id。...总结 上面介绍了好几种id,每种 id 有各自应用场景,在达到上限后表现也不同: 1、 表 id 达到上限后,再申请时它值就不会改变,进而导致继续插入数据时报主键冲突错误 2、 row_id

1.2K20

id用完怎么

我们知道mysql中存在很多id,然后不断增长,由于只要给id定义了这个数字节长度,那么他就有了上限,比如无符号整型(unsigned int)是4个字节,因此他上限是2^32-1, 表定义增值...id 表定义增值达到上限后逻辑是,在申请下一个id时,得到值保持不变....8个字节bigint unsigned InnoDB系统row_id 如果你创建InnoDB表没有指定主键,那么InnoDB会给你创建一个不可见,长度为6字节row_id,InnoD维护了一个...,但是如果global_query_id达到上限之后,就会继续从0开始计算,理论上还是会出现同一个binlog有相同xid,又因为global_querey_id定义为8个字节,上限是2^64-...thread_id 线程id是我们最常见一种id,我使用show processlist第一列计数就是thread_id, thread_id逻辑很好理解,系统保存一个全局变量thread_id_conuter

1K20

MySQL replace into导致id问题

// MySQL replace into导致id问题 // 今天线上遇到一个问题,挺有意思,这里记录一下希望对大家有所帮助。...某个表中,只有一条记录,发生高可用切换之后,id值发生了变化,主从id值不一致,导致数据写入报主键冲突错误。...我们知道,在MySQL中,是支持replace语法,当你执行replace into时候,如果该条记录存在,那么replace会删除这条记录,然后重新insert一条新记录。...(6,3),而age=3这条记录已经存在,所以会先删除id=3,age=3这条记录,然后插入id=6,age=3这条记录增值变为7....*/; 可以看到,MySQL将replace into在binlog中保存格式是update语句,那么update语句本质上不会对增值进行修改,所以就导致了主从id不一致,这样虽然看着没有什么问题

7K20

如果MySQL ID 用完了,该怎么办?

如果你用过或了解过MySQL,那你一定知道主键了。每个id都是定义了初始值,然后按照指定步长增长(默认步长是1)。...虽然,自然数是没有上限,但是我们在设计表结构时候,通常都会指定字段长度,那么,这时候id就有上限了。 既然有上限,就总有被用完时候,如果id用完了,怎么办呢?今天就一起来学习下吧。...id 说到id,相信你第一反应一定是在设计表结构时候自定义一个id字段,那么就有一个问题啦,在插入数据时有可能唯一主键冲、sql事务回滚、批量插入时候,批量申请增值等原因导致id...但是这个过程有脏读存在,那么这个id就不会是原子性,存在重复可能性。 thread_id 其实,线程 id 才是 MySQL 中最常见一种 id。...上面介绍了几种MySQL自身一些id,其实,实际运用中,我们也可能会选择外部主键,然后持久化到数据库,以此来代替数据库自身id。下面来说说吧。

75520

MySQL ID几个小问题

下面这几个小问题都是基于 InnoDB 存储引擎。 1. ID最大记录删除后,新插入记录ID是什么 例如当前表中有ID为1,2,3三条记录,把3删除,新插入记录ID从哪儿开始?...=4 DEFAULT CHARSET=latin1 ID为4,删除ID最大记录并不影响ID值。...MySQL 重启后ID从哪儿开始 例如当前表中有ID为1,2,3三条记录,把3删除,重启MySQL,新插入记录ID从哪儿开始? 很多人会认为从4开始,实际是从3开始。...tb1 values(null); 删除ID为3记录: delete from tb1 where id=3 通过上一个问题,我们知道,此时ID值为4。...删除最大ID值对ID值没有影响,但MySQL重启之后有影响,不会使用之前ID值,而是使用最大ID+1,因为ID值是存在内存中,重启后需要重新计算。 ID用完后就不变了。

7.8K21

id用完了怎么

id用完了怎么办 阅读本文大概需要2分钟 1. 表定义id 我们通常会把主键设置成id,主键id最大值是 (bigint unsigned)。...InnoDB系统row_id 如果创建表使用InnoDB引擎,但是没有指定主键的话。InnoDB会创建一个不可见,长度为6个字节row_id。...InnoDB维护了一个全局变量dict_sys.row_id,所有无主键InnoDB表,每插入一行数据,会将当前时刻dict_sys.row_id 赋值给row_id,然后1。...row_id 上限是 ,row_id 达到上限后,会归0,然后重新循环,则新插入数据会覆盖之前数据(如果row_id一致)。 3. InnoDB trx_id trx_id, 事务id。...每一行数据会记录更新它trx_id, MVCC实现原理就是根据当前trx_id 和数据持有的trx_id 做比较来判断数据是否可见。

98820

关于mysqlid获取和重置

缺点:获取不是真正id,是表中最大Id,如果有删除数据的话,那么该值和id相差比较大。如果有连表数据,有可能导致数据错乱。...使用mysql查询函数:SHOW TABLE STATUS; 优点:能够准确查到id。而且可以在语句后面加上where语句或者like语句来过滤。...缺点:该语句返回是一个记录集,不能单独返回增值。所以需要额外操作来获取。 使用自定义查询方法:mysql表相关信息是放在information_schema表里。...---- mysqlid重置 使用truncate:truncate table; 说明:使用truncate会删除数据释放空间,并且重置字id,但不会删除定义。...也不会清空数据,有可能会出现重复key可能,所以此方法也只适用于清空表之后重置id或者大量删除后修改自id

11.4K20

技术分享 | 关于 MySQL ID 事儿

值并不是保存在表结构信息内,对于不同版本它们有如下区别: 1.1.1 MySQL 8.0版本之前(重启后可能会产生变化): 计数器值存储在内存中,重启后丢弃,下一次将读取最大一个ID...不一定,业务也不应该过分依赖 MySQL ID 连续性,在以下三种情况下,并不能保证 ID 连续性: 1.5.1 插入时其他唯一索引冲突 假设已存在数据{1,张三},且张三所属字段设置了唯一主键...1.5.3 发生 Bulk Inserts(大量插入)时 发生大量插入时可能会出现ID并不是连续情况 二、 ID 用完了该怎么办?...由于它并不产生错误,还会造成数据覆盖写。所以我们平时还是尽量给表都设置一个合理主键才是。 三、 ID 暴露导致被爬虫恶意遍历该怎么办?...该接口通过简单尝试就可以暴露出真实业务用户总数,可以很方便使用爬虫从1开始递增获取数据信息。 那么有的同学说,我既想使用 ID 带来好处,也不想承受这种比较常见问题,那该怎么办呢?

3K10

MySQL 主键 ID 会用完吗?

MySQL 主键 ID 会用完吗?...首先我们一般创建 MySQL 数据表时候,大部分情况下会创建一个主键ID 字段,可能你建表语句如下: CREATE TABLE IF NOT EXISTS `tb`( `id` INT...可以看到 INT 类型取值范围是 -2147483648 - 4294967295。所以 在 MySQL ID 是会用完。那么问题来了,加入他 ID 用完会发生什么事呢?...如果会那么久需要创建 8 字节 INT 类型了,他值最大是 2^64-1 那么问题又来了,你说 我有些业务是不需要主键 、不需要编号,我不创建这个字段,就好了,这样想恭喜你 回答错误....总结: ID 用完 会报主键冲突、数据插入失败。 不指定主键、默认创建 row_id 会 覆盖原有的数据。

9.5K20

面试官问:MySQL ID 用完了,怎么办?

大家好,最近粉丝问我这样一个面试题。MySQL ID 用完了,怎么办?以下是这个面试题解决方案。 如果你用过或了解过MySQL,那你一定知道主键了。...既然有上限,就总有被用完时候,如果id用完了,怎么办呢?今天就一起来学习下吧。...id 说到id,相信你第一反应一定是在设计表结构时候自定义一个id字段,那么就有一个问题啦,在插入数据时有可能唯一主键冲、sql事务回滚、批量插入时候,批量申请增值等原因导致id...但是这个过程有脏读存在,那么这个id就不会是原子性,存在重复可能性。 thread_id 其实,线程 id 才是 MySQL 中最常见一种 id。...上面介绍了几种MySQL自身一些id,其实,实际运用中,我们也可能会选择外部主键,然后持久化到数据库,以此来代替数据库自身id。下面来说说吧。

82010

面试官问:MySQL ID 用完了,怎么办?

大家好,最近粉丝问我这样一个面试题。MySQL ID 用完了,怎么办?以下是这个面试题解决方案。 如果你用过或了解过MySQL,那你一定知道主键了。...既然有上限,就总有被用完时候,如果id用完了,怎么办呢?今天就一起来学习下吧。...id 说到id,相信你第一反应一定是在设计表结构时候自定义一个id字段,那么就有一个问题啦,在插入数据时有可能唯一主键冲、sql事务回滚、批量插入时候,批量申请增值等原因导致id...但是这个过程有脏读存在,那么这个id就不会是原子性,存在重复可能性。 thread_id 其实,线程 id 才是 MySQL 中最常见一种 id。...上面介绍了几种MySQL自身一些id,其实,实际运用中,我们也可能会选择外部主键,然后持久化到数据库,以此来代替数据库自身id。下面来说说吧。

79450

面试官问:MySQLID用完了,怎么办?

首先,创建一个最简单表,只包含一个id,并插入一条数据。...我们可以算下最大当前声明ID最大是多少,由于这里定义是 intunsigned,所以最大可以达到232幂次方 - 1 = 4294967295 这里有个小技巧,可以在创建表时候,直接声明AUTO_INCREMENT...Duplicate entry '4294967295' for key 'PRIMARY' 0.00054 sec 说明,当再次插入时,使用ID还是 4294967295,报主键冲突错误...4294967295,这个数字已经可以应付大部分场景了,如果你服务会经常性插入和删除数据的话,还是存在用完风险,建议采用bigint unsigned,这个数字就大了。...不过,还存在另一种情况,如果在创建表没有显示申明主键,会怎么办?

50830

面试官问:MySQL ID 用完了,怎么办?

如果你用过或了解过MySQL,那你一定知道主键了。每个id都是定义了初始值,然后按照指定步长增长(默认步长是1)。...虽然,自然数是没有上限,但是我们在设计表结构时候,通常都会指定字段长度,那么,这时候id就有上限了。既然有上限,就总有被用完时候,如果id用完了,怎么办呢?今天就一起来学习下吧。...id 说到id,相信你第一反应一定是在设计表结构时候自定义一个id字段,那么就有一个问题啦,在插入数据时有可能唯一主键冲、sql事务回滚、批量插入时候,批量申请增值等原因导致id...但是这个过程有脏读存在,那么这个id就不会是原子性,存在重复可能性。 thread_id 其实,线程 id 才是 MySQL 中最常见一种 id。...上面介绍了几种MySQL自身一些id,其实,实际运用中,我们也可能会选择外部主键,然后持久化到数据库,以此来代替数据库自身id。下面来说说吧。

90650

面试官问:MySQL ID 用完了,怎么办?

如果你用过或了解过MySQL,那你一定知道主键了。每个id都是定义了初始值,然后按照指定步长增长(默认步长是1)。...虽然,自然数是没有上限,但是我们在设计表结构时候,通常都会指定字段长度,那么,这时候id就有上限了。既然有上限,就总有被用完时候,如果id用完了,怎么办呢?今天就一起来学习下吧。...id 说到id,相信你第一反应一定是在设计表结构时候自定义一个id字段,那么就有一个问题啦,在插入数据时有可能唯一主键冲、sql事务回滚、批量插入时候,批量申请增值等原因导致id...但是这个过程有脏读存在,那么这个id就不会是原子性,存在重复可能性。 thread_id 其实,线程 id 才是 MySQL 中最常见一种 id。...上面介绍了几种MySQL自身一些id,其实,实际运用中,我们也可能会选择外部主键,然后持久化到数据库,以此来代替数据库自身id。下面来说说吧。

84210

面试官问:MySQLID用完了,怎么办?

首先,创建一个最简单表,只包含一个id,并插入一条数据。...我们可以算下最大当前声明ID最大是多少,由于这里定义是 intunsigned,所以最大可以达到232幂次方 - 1 = 4294967295 这里有个小技巧,可以在创建表时候,直接声明AUTO_INCREMENT...Duplicate entry '4294967295' for key 'PRIMARY' 0.00054 sec 说明,当再次插入时,使用ID还是 4294967295,报主键冲突错误...4294967295,这个数字已经可以应付大部分场景了,如果你服务会经常性插入和删除数据的话,还是存在用完风险,建议采用bigint unsigned,这个数字就大了。...不过,还存在另一种情况,如果在创建表没有显示申明主键,会怎么办?

1.5K30

面试官问:MySQL ID 用完了,怎么办?

首先,创建一个最简单表,只包含一个 id,并插入一条数据。...2,这离用完还有很远,我们可以算下最大当前声明 ID 最大是多少,由于这里定义是 intunsigned,所以最大可以达到 2 32 幂次方 - 1 = 4294967295 这里有个小技巧...Duplicate entry '4294967295' for key 'PRIMARY' 0.00054 sec 说明,当再次插入时,使用 ID 还是 4294967295,报主键冲突错误...4294967295,这个数字已经可以应付大部分场景了,如果你服务会经常性插入和删除数据的话,还是存在用完风险,建议采用 bigint unsigned,这个数字就大了。...不过,还存在另一种情况,如果在创建表没有显示申明主键,会怎么办?

60420

MongoDB id 生成

概述 我们使用 MySQL 等关系型数据库时,主键都是设置成。 但在分布式环境下,尤其是在分库分表以后,单纯主键会产生冲突,需要考虑如何生成唯一 ID。...缺点 虽然在同一个进程内一秒内生成多个主键 id,但是在数据库全局是没有这样规律。 有时,能够完全 id 对于应用业务来说是非常重要。...MongoDB 允许我们自己生成 _id,但是这样唯一性压力就又来了,在并发环境下保证 ID 严格与避免 ID 冲突有时是需要丰富经验。 5....自己生成 id — findAndModify 虽然已经有很多生成 id 方案可供选用,如依赖 redis 等,但 MongoDB 本身提供了原子操作,我们可以通过 MongoDB 提供原子操作来实现...id

7.6K30
领券