快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

mysql主键满了怎么办,mysql主键用完了怎么办

mysql 主键 自增 达到 最大 怎么办

在数据库那边设置主键为int型,设置主键自增属性即可

创新互联建站是一家专注于成都网站制作、成都网站设计与策划设计,多伦网站建设哪家好?创新互联建站做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:多伦等地区。多伦做网站价格咨询:18982081108

create

table

`table_name`(

id

int

auto_increment

primary

key)插入的时候不用插主键,他自己就会增长

mysql自动增长的主键问题

报什么错?另外贴一下你的插入语句吧。

插入语句里面不要对该字段赋值。

MySQL之主键

主键是一个索引,mysql的索引是B+树,Mysql会按照键值的大小进行顺序存放,如果我们设置自增id为主键,这个时候主键是按照一种紧凑的接近顺序写入的方式进行存储数据。如果我们用其他字段作为主键的话,此时Mysql不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多额外的开销,同时频繁的移动、分页操作造成了大量的碎片。

- 考虑性能消耗

- 考虑资源消耗

- 考虑分库分表

mysql 现有一表 主键是Int 自增 ID满了 改不了bigint 有什么办法解决吗?

数据备份,新建一个表,然后把这个表的内容加进去。这是最方便的了!

MySQL主键自增值为什么有“空洞”?

* G r e a t S Q L 社 区 原 创 内 容 未 经 授 权 不 得 随 意 使 用 , 转 载 请 联 系 小 编 并 注 明 来 源 。

本文在测试 insert 、 insert ignore 、 replace into 三种数据插入方式的时候,发现插入数据的时候在表内存在带有“唯一特性”的值重复的情况下三种语句的处理方式。最终发现了MySQL主键自增值“空洞”了

测试场景为MySQL 8.0:

1、建表,包含主键及唯一约束

2、写入初始测试数据

insert方式插入数据在处理过程中发生主键传统等错误时候,语句会被终止,并告知错误的原因。而使用insert ignore的方式进行数据插入,则会忽略插入错误的行继续插入没有问题的行记录,最终以warning进行提示。

在测试过程中惊奇地发现测试表中的主键自增列发生了改变,经过之前的操作已经变成了7:

最后,replace into的方式导致如果插入数据是原值的情况,然后主键冲突,就对该主键的内容进行替换,如果唯一键冲突,唯一值所在行就会删除,重新插入新的行,如果都不冲突则正常插入数据。

上文测试了三种插入数据的方式,可是测试过程中发现插入失败的时候,自增列的自增值居然变大了。

为了更好地理解,首先让我们具体认识一下 AUTO_INCREMENT 属性在不同的存储引擎当中,其自增值的保存策略有所不同:

可是理解了这个并不能马上理解现在的这个问题,我们知道当数据进行数据插入的时候,如果插入的数据中自增列不指定其值的时候,该列就会以当前自增值作为其值,如果指定其值就会插入指定的值,当然也有满足唯一的原则,同时插入指定值大于自增值时,自增值也会随之改变。而自增值使用的算法是以 auto_increment_offset 参数决定开始,以 auto_increment_increment 决定步长来实现的,默认情况都是1:

那么,为什么会出现插入数据未成功,自增值却变大了的情况呢?原因很简单,用插入数据的流程来进行分析:

因为自增值的保存是在插入数据真正执行前完成的,因此就会出现这种问题了。

这个时候有人就会想了,可以把 AUTO_INCREMENT 值改回去吗?简单测试一下:

显然,如果自增值往大的方向修改是没有问题的,但如果往小的修改就要看目前数据库插入的值是否会将修改后的自增值“卡”在中间,如果出现这种情况是没办法改回去的,原因显而易见,自增属性与主键配套使用,如果现在表里id=4和id=6之间差了个5的值,将自增值改回5,当插入数据时,自增值就会插入5的值并且把自增值加1,问题就出现了,此时自增值再进行插入就违背了唯一的原则了

在生产环境中还存在很多类似的问题,如:

在插入过程中,开启了一个事务,在插入的时候发生了事务的回滚,当回滚后再次插入数据,发现自增值又出现了“空洞”,那么问题又来了,为什么在插入数据的时候发生了回滚,数据回滚了,自增值却没有回滚呢?为了更直观,继续测试,假设有两个事务。

测试前数据:

进行测试:

测试后数据:

发现还是“空洞”了,而且此时答案也十分清楚了,在不同事务在进行写入操作的时候申请自增值,为了避免两个事务申请到相同的自增值,所以需要对其加锁,按照一定顺序进行申请自增值。根据前面的例子来看:

此时就出现了前面说到的问题了,没办法回滚,回滚就会出现自增值“卡”在中间的情况了,以后有机会再继续聊聊自增锁的问题。

En j o y G r e a t S Q L : )

《深 入 浅 出 M G R 》 视 频 课 程

戳 此 小 程 序 即 可 直 达 B 站

l i . c om/medialist/play/136385008 2? business=space_collectionbusiness_id=343928desc=0

文 章 推 荐 :

G r e a t S Q L 是 由 万 里 数 据 库 维 护 的 M y S Q L 分 支 , 专 注 于 提 升 M G R 可 靠 性 及 性 能 , 支 持 I n n o D B 并 行 查 询 特 性 , 是 适 用 于 金 融 级 应 用 的 M y S Q L 分 支 版 本 。

G i t e e :

h t t p s : / / g i t e e . c o m / G r e a t S Q L / G r e a t S Q L

G i t H u b :

h t t p s : / / g i t h u b . c o m / G r e a t S Q L / G r e a t S Q L

h t t p s : / / s p a c e . b i l i b i l i . c o m / 1 3 6 3 8 5 0 0 8 2 / v i d e o

微 信 Q Q 群 :

可 扫 码 添 加 G r e a t S Q L 社 区 助 手 微 信 好 友 , 发 送 验 证 信 息 “ 加 群 ” 加 入 G r e a t S Q L / M G R 交 流 微 信 群 , 亦 可 直 接 扫 码 加 入 G r e a t S Q L / M G R 交 流 Q Q 群 。


新闻名称:mysql主键满了怎么办,mysql主键用完了怎么办
网站URL:http://6mz.cn/article/hdhpdi.html

其他资讯