db2 SQLCODE=-803, SQLSTATE=23505, SQLERRMC=1;test.SYS_DICT_DATA, DRIVER=3.58/ db2主键自增报主键重复

一、问题描述

今天在网db2数据库中添加数据的时候,抛出了这个异常,在网上查找资料是说 主键冲突了,我设置的主键是自增的,这是什么情况。

org.springframework.dao.DuplicateKeyException: 
### Error updating database.  Cause: com.ibm.db2.jcc.am.oo: DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=1;test.SYS_DICT_DATA, DRIVER=3.58.82
### The error may exist in file [D:\\target\classes\mapper\system\SysDictDataMapper.xml]
### The error may involve com.system.mapper.SysDictDataMapper.insertDictData-Inline
### The error occurred while setting parameters
### SQL: insert into sys_dict_data(                dict_sort,       dict_label,       dict_value,       dict_type,                   is_default,       status,             create_by,      create_time    )values(                   ?,          ?,       ?,       ?,                   ?,       ?,             ?,      sysdate    )
### Cause: com.ibm.db2.jcc.am.oo: DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=1;test.SYS_DICT_DATA, DRIVER=3.58.82
; DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=1;test.SYS_DICT_DATA, DRIVER=3.58.82; nested exception is com.ibm.db2.jcc.am.oo: DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=1;test.SYS_DICT_DATA, DRIVER=3.58.82
	at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:247)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
	at com.sun.proxy.$Proxy97.insert(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272)

具体原因:

我运行的是测试代码,数据库中已存在数据,这写数据可能是别人手动添加进去的,加的时候指定了主键,当数据库再新增数据的时候(不指定主键),主键会按照默认的自增的顺序新增,由于数据库中已经存在了相应的主键,所以会抛出主键冲突的异常。

二、解决方法

解决方式:修改主键的自增基数,比如我数据库中现有数据的id最大是 24,那我就让数据库从25开始自增,具体的语句是:

alter table table_name alter ID restart with 25

这样问题就解决了

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值