Oracle数据库违反唯一约束条件
问题
ORA-00001: 违反唯一约束条件 (xxx.SYS_C0014310)
原因
数据库的ID值,小于序列的next number
值,由于表中的ID值是唯一的,所以select max(id) from test
查的该ID大于Sequences里面的开始ID
解决办法
使用sql修改索引值
操作步骤如下
1、查询违反约束的序列
select a.constraint_name,a.constraint_type,b.column_name,b.table_name
from user_constraints a inner join user_cons_columns b on a.table_name=b.table_name
where a.constraint_name='SYS_C0014310'

2、查询序列的下一次值是多少
select jy_dict_dt_seq.nextval from dual;
3、查询序列中最大值
select max(id) from jy_dict_dt;
4、修改序列值大小
alter sequence jy_dict_dt_seq increment by 1000; -- 修改步进,例如没有修改前的序列值为200000,执行此条会将200000+1000,此时序列开始值为210000
5、验证序列是否修改成功
select jy_dict_dt_seq.nextval from dual;
6、调整步进
alter sequence jy_dict_dt_seq increment by 1; -- 修改步进,例如没有修改前的序列值为200000,执行此条会将200000+1,此时序列开始值为200001,
使用PLSQL工具修改

将开始于
修改为当前表中索引列最大值+增量值
即可解决。
最大值获取方式:
select max(id) from jy_dict_dt;