Skip to content

duplicate key value violates unique constraint

原因分析: 表名: table 表table的主键id 是由序列 x$seq 生成的 当手动给主键赋值的时候.序列是不会自增量变化的 所以保存时候会报 duplicate key value violates unique constraint …

解决方案:更新id序列

对于需要更新数据库内部id序列的情况,不同数据库有不同的操作:

Postgres

SELECT setval('table_id_seq', max(id)) FROM table;

使用setval函数设置序列的当前值到表中的最大id。

MySQL

ALTER TABLE table AUTO_INCREMENT =最大id;

或者使用:

ALTER TABLE table AUTO_INCREMENT = 1;

强制重置序列。

Sqlite

UPDATE sqlite_sequence SET seq = 最大id WHERE name = '表名';

使用sqlite_sequence表更新序列值。

Oracle

ALTER SEQUENCE 序列名 INCREMENT BY n;

使用ALTER修改序列的增量。

或者直接设置序列的下一个值:

ALTER SEQUENCE 序列名 INCREMENT BY 值;

所以针对不同数据库,主要操作是利用内建函数或语法来获取表中最大id,并强制将序列值设置为这个最大id,以保证下次id获取符合预期。

更新完成后,就可以正常让数据库自动获取下一个id插入数据了。