MySQLMariaDB重置⾃增ID(AUTO_INCREMENT)教程-完美保
留表数据的。。。
MySQL 表的主键⼀般都要使⽤⾃增 ID (AUTO_INCREMENT) ,当你删除其中⼀条,会造成⾃增 ID 不连续,这可能导致需要使⽤ ID 进⾏判断时的不准确,这时可能会考虑重置⾃增 ID。
本教程将介绍多种重置 MySQL ⾃增 ID 的⽅法,特别是不会删除数据的重置⾃增 ID 法,⾮常好⽤。
另外推荐⼀下 - 可与 MySQL 搭配使⽤。卡拉云是⼀套低代码开发⼯具,⽆需部署,开箱即⽤。它可接⼊常见的数据库
(MySQL、MongoDB等)及 RESTful API,你⽆需懂会任何前端技术,只要会写 SQL,就可以快速搭建属于你⾃⼰的数据库管理⼯具。
⼀. 创建测试⽰例
⾸先我们创建⼀个数据库kalacloud_demo及表kalacloud_table_demo来作为本教程的演⽰⽰例:
CREATE DATABASE kalacloud_demo;
USE kalacloud_demo;
CREATE TABLE kalacloud_table_demo (
id INT NOT NULL AUTO_INCREMENT,
test VARCHAR(45) DEFAULT NULL,
PRIMARY KEY (id)
);
然后我们向kalacloud_table_demo表中插⼊⼀组测试数据:
INSERT INTO kalacloud_table_demo(test)
VALUES('kalacloud 1'),
('kalacloud 2'),
('kalacloud 3');
我们来使⽤SELECT看⼀下效果:
SELECT * FROM kalacloud_table_demo;
我们可以看到⽰例表中,id 列的值是连续的1、2、3
接着,我们删除 ID 3,然后再插⼊⼀条新数据,看看变化。
DELETE FROM kalacloud_table_demo WHERE ID = 3;
INSERT INTO kalacloud_table_demo(test)
VALUES('kalacloud insert 3');
SELECT * FROM kalacloud_table_demo;
从返回结果可以看到,我们删除 ID 3 这⼀⾏后,再插⼊⼀⾏ ID ⾃增是从 4 开始的。接下来,我们来讲解如何重置 ID,使它回复到连续数。
⼆. 使⽤ ALTER TABLE 重置⾃增 ID
接前⽂⽰例,我们先删掉 ID 4 ,再使⽤ALTER TABLE重置表 ID:
DELETE FROM kalacloud_table_demo WHERE ID = 4;
使⽤ALTER TABLE重置⾃增 ID:
ALTER TABLE table_name AUTO_INCREMENT = value;
table_name为当前要重置⾃增 ID 的表名。
value必须是⼤于当前表中最⼤ ID 数,本⽰例中当前表最⼤数为 2,我们可以设置成 3。
我们使⽤以下命令将kalacloud_table_demo⾃增 ID 重置为 3
ALTER TABLE kalacloud_table_demo AUTO_INCREMENT = 3;
接着,我们插⼊⼀⾏数据,看⼀下效果。
INSERT INTO kalacloud_table_demo(test)
VALUES('kalacloud insert 3');
SELECT * FROM kalacloud_table_demo;
从返回结果我们可以看到,新插⼊的数据不再从 4 开始,⽽是按照我们刚刚重置的数,从 3 开始。
三. 使⽤ TRUNCATE TABLE 重置⾃增 ID
TRUNCATE TABLE原理是删除掉表中全部数据并释放空间,达到重置 ID 的效果,但它与DROP TABLE(直接删除表)不同,它不会删掉表本⾝,也不会删掉表的定义,仅清空表数据。
TRUNCATE TABLE kalacloud_table_demo;
表数据被清空后,新写⼊的数据,肯定就从 ID 1 重新开始了。
但在现实操作中,我们怎么可能就为了重置 ID ,把⼀个填满内容的数据库清空呢,这个操作在多数场景中并不实际。
接下来,我们来讲解如何使⽤直接删除 ID 法和替换法来保住数据的前提下,重置 ID。
四. 保留数据重置 - 直接删除 ID 法
此⽅法的原理是直接把 ID 列删掉,然后重新新建 ID 列,从⽽达到保留数据,重置 ID 的效果。
接上⽂数据,⼤家可以跟着本教程⼀起重置演⽰的表数据,⽅便继续演⽰操作:
TRUNCATE TABLE kalacloud_table_demo;
INSERT INTO kalacloud_table_demo(test)
VALUES('kalacloud 1'),
('kalacloud 2'),
('kalacloud 3');
DELETE FROM kalacloud_table_demo WHERE ID = 3;
INSERT INTO kalacloud_table_demo(test)
VALUES('kalacloud insert 3');
SELECT * FROM kalacloud_table_demo;
我们使⽤ SELECT 查看表数据,可以看到 ID 为 1、2、4
演⽰数据就绪,接着我们开始重置 ID
我们先删除 ID 列:
ALTER  TABLE kalacloud_table_demo DROP id;
然后再插⼊新 ID 列:
ALTER  TABLE  kalacloud_table_demo ADD id mediumint(6) PRIMARY KEY NOT NULL AUTO_INCREMENT FIRST;
最后⽤SELECT看⼀下表的变化:
SELECT * FROM kalacloud_table_demo;
可以看到表 ID 已经重置。
这种⽅法对于数据量较⼤的表有⼀定风险。此⽅法在删除 ID 后,重新加⼊新 ID 时,有可能顺序会被打乱,保险起见,我们可以使⽤另⼀种在保护数据的前提下,重置 ID 的⽅法。
五. 保留数据重置 - 两步替换 ID 法
为了保证删除 ID 列后,再加⼊新 ID 列这种⽅法不会打乱原有数据的顺序,我们可以使⽤更保守⼀些的
替换法,达到重置 ID 的效果。
我们重置⼀下⽰例数据:
TRUNCATE TABLE kalacloud_table_demo;
INSERT INTO kalacloud_table_demo(test)
VALUES('kalacloud 1'),
('kalacloud 2'),
('kalacloud 3');
DELETE FROM kalacloud_table_demo WHERE ID = 3;
INSERT INTO kalacloud_table_demo(test)
VALUES('kalacloud insert 3');
SELECT * FROM kalacloud_table_demo;
接下来,我们使⽤替换法把⽰例数据的 ID 重置为 1、2、3
⾸先,取消kalacloud_table_demo表中 ID 列的⾃增和主键的定义:
ALTER TABLE kalacloud_table_demo MODIFY COLUMN id int NOT NULL FIRST ,DROP PRIMARY KEY;
在表⾥新增id_renew列,设置为⾃增(AUTO_INCREMENT)主键(PRIMARY KEY),我们将使⽤这个列来替换ID列。ALTER TABLE kalacloud_table_demo ADD COLUMN id_renew int NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id_renew);
使⽤SELECT查看当前表情况,可以看到新增的id_renew这⼀列的顺序已经是连续的了。
接着,我们可以删除掉原来乱序的 ID 列
ALTER TABLE kalacloud_table_demo DROP COLUMN id;
最后,我们将id_renew,重命名,更为id
ALTER TABLE kalacloud_table_demo CHANGE COLUMN id_renew id int(7) NOT NULL AUTO_INCREMENT FIRST;
drop删除表
我们使⽤SELECT来看⼀下效果:
可以看到,在保护数据以及数据顺序不被打乱的前提下,我们重置了 ID 列的数字顺序。
六. 总结
本教程详细讲解了四种 MySQL 重置⾃增 ID 的⽅法,他们各有各的特点。
ALTER TABLE 重置法:适合表格刚刚被打乱,乱序的位置之后的数据量不多的情况
TRUNCATE TABLE 重置法:适合表格中数据不重要,可清空重来。
保留数据重置 - 直接删除 ID 法:数据量较⼩时。
保留数据重置 - 两步替换 ID 法:前⼀种⽅法的保守⽅法,数据更安全。