民航电子数据库:replace into导致自增主键异常,新增数据时报错:违反唯一键约束


场景

1、对接民航电子数据库

2、由于truncate、drop命令会使数据库报错:执行失败,[E14011]资源忙(加锁超时),所以用了replace into命令来整理表数据


异常

新增数据时报错

org.springframework.jdbc.UncategorizedSQLException: 
### Error updating database.  Cause: java.sql.SQLException: [E13001] 违反唯一值约束 
### The error may involve com.xxx.mapper.icip.policy.QueuePolicyMapper.insertSelective-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO t_mb_xxx  ( xxx,xxx,xxx ) VALUES( ?,?,? )
### Cause: java.sql.SQLException: [E13001] 违反唯一值约束 
; uncategorized SQLException; SQL state [cae13001]; error code [13001]; [E13001] 违反唯一值约束 ; nested exception is java.sql.SQLException: [E13001] 违反唯一值约束 

以上省略表结构以SQL语句(表主键为自增主键)


原因

是使用replace into整理表数据导致

replace into保存的数据,民航电子数据库不会维护自增主键,导致直接冲突


解决

方法一:删除数据重新insert

该方法就不再赘述了


方法二:刚刚自增主键的起始值

第一步:查询出seq_name
select seq_name,curr_val,cache_val from dba_sequences where seq_id in (
select serial_id from dba_columns where table_id in
(select table_id from dba_tables where table_name =‘表名’));

在这里插入图片描述


第二步:查出表当前ID最大值
select max(id) from 表名;

在这里插入图片描述


第三步:修改序列当前值
ALTER SEQUENCE 模式名.第一步查询出来的seq_name START WITH 表最大值+1;

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值