1 问题场景:
MySQL建表时未设置id主键自增,有时候增加、删除、修改、数据录入错误时导致数据库中主键ID无序化。
2 原因分析:
MySQL建表时未设置自增列,Python建立ORM模型时也没设置自增列
3 解决方案:
3.1 方案一:手动更新id值
最不推荐
这是最简单的方法之一,我们只需要使用UPDATE语句更新指定记录的ID值即可。
以下是修改ID为4的记录为2的示例代码:
UPDATE users
SET id = 2
WHERE id = 4;
3.2 方案二:删除原有记录并插入新记录
也不推荐
另一种修改ID值的方法是先删除原有记录,然后再插入一条新记录。
这种方法的前提是原有记录的ID值在其他地方没有被引用。
-- 删除原有记录
DELETE FROM users WHERE id = 4;
-- 插入新记录
INSERT INTO users (id, name)
VALUES (2, 'Updated Name');
3.3 方案三:批量操作更新自增ID
数据排序不重要时
删除原有的自增ID,重新建立新的自增ID。
ALTER TABLE 表名 DROP id;
ALTER TABLE 表名 ADD id BIGINT(20) PRIMARY KEY NOT NULL AUTO_INCREMENT FIRST;
3.4 方案四:原神高手的选择
数据排序不变
最好用的一种方式,批量操作。
-- 取消id为主键
ALTER TABLE 表名 MODIFY id INT(11) NOT NULL FIRST,DROP PRIMARY KEY;
-- 新增id2列,自增,设置为主键。
ALTER TABLE 表名 ADD id2 INT(11) NOT NULL AUTO_INCREMENT FIRST,ADD PRIMARY KEY (id2);
-- 删除id列
ALTER TABLE 表名 DROP id;
-- 把id2改为id
ALTER TABLE 表名 CHANGE id2 id INT(11) NOT NULL AUTO_INCREMENT FIRST;
4 总结
用第四种