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;

更多推荐

Oracle数据库违反唯一约束条件