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插入数据了。