在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在面试中,大家应该经历过如下场景
这个问题是一个粉丝给我提的,我觉得挺有 正文 简单版 我们先明白一点,在mysql中,Int整型的范围如下 我们以无符号整型为例,存储范围为0~4294967295,约43亿!我们先说一下,一旦自增id达到最大值,此时数据继续插入是会报一个主键冲突异常如下所示
那解决方法也是很简单的,将Int类型改为BigInt类型,BigInt的范围如下 就算你每秒10000条数据,跑100年,单表的数据也才
接下来,面试官可以问你一个更坑的问题!
怎么改 目前业内在线修改表结构的方案,据我了解,一般有如下三种 方式一:使用mysql5.6+提供的在线修改功能 所谓的mysql自己提供的功能也就是mysql自己原生的语句,例如我们要修改原字段名称及类型。 mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type; 那么,在mysql5.5这个版本之前,这是通过临时表拷贝的方式实现的。执行 如图所示,对于修改数据类型这种操作,是不支持并发的DML操作!也就是说,如果你直接使用 那我们只能用方式二或者方式三 方式二:借助第三方工具 业内有一些第三方工具可以支持在线修改表结构,使用这些第三发工具,能够让你在执行
以 1、创建一个新的表,表结构为修改后的数据表,用于从源数据表向新表中导入数据。 2、创建触发器,用于记录从拷贝数据开始之后,对源数据表继续进行数据修改的操作记录下来,用于数据拷贝结束后,执行这些操作,保证数据不会丢失。 3、拷贝数据,从源数据表中拷贝数据到新表中。 4、rename源数据表为old表,把新表rename为源表名,并将old表删除。 5、删除触发器。 然而这两个有 高深版 其实答完上面的问题后,这篇文章差不多完了。但是,还记得我在开头说的么。这是一个很有 CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`), ) EN 执行下列SQL insert into t values(null); // 插入的行是 (1) begin; insert into t values(null); rolllack; insert into t values(null); // 插入的行是 (3) 因此,表中的真实id必然会出现断续的情况。 因此在实际中,你根本等不到自增主键用完到情形!因此,专业版回答如下:
到此这篇关于浅谈MySQL中的自增主键用完了怎么办的文章就介绍到这了,更多相关MySQL 自增主键用完内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论