当删除数据库表中的记录后,自增主键ID会继续递增,导致ID与实际数据量不一致。以下是几种解决方案:
-- 重置自增值为当前最大ID+1
ALTER TABLE your_table_name AUTO_INCREMENT = (SELECT MAX(id) + 1 FROM your_table_name);
-- 检查当前标识值
DBCC CHECKIDENT ('your_table_name', NORESEED);
-- 重置标识值
DBCC CHECKIDENT ('your_table_name', RESEED, (SELECT MAX(id) FROM your_table_name));
-- 重置序列
SELECT setval(pg_get_serial_sequence('your_table_name', 'id'), (SELECT MAX(id) FROM your_table_name));
-- MySQL
ALTER TABLE your_table_name MODIFY COLUMN id CHAR(36) NOT NULL DEFAULT UUID();
-- PostgreSQL
ALTER TABLE your_table_name ALTER COLUMN id SET DATA TYPE UUID USING gen_random_uuid();
is_deleted
字段标记删除而非物理删除记录-- 创建新表结构相同但不带自增属性的表
CREATE TABLE new_table LIKE your_table_name;
-- 插入数据
INSERT INTO new_table SELECT * FROM your_table_name;
-- 重命名表
RENAME TABLE your_table_name TO old_table, new_table TO your_table_name;
-- 重新添加自增属性
ALTER TABLE your_table_name MODIFY COLUMN id INT AUTO_INCREMENT PRIMARY KEY;
选择哪种方案取决于您的具体业务需求、数据库规模和对ID连续性的要求。