ORA-00001: 违反唯一约束条件 的发送场景与解决方案?

本文探讨了Oracle数据库中主键冲突的原因及解决方案,包括不同类型的主键(如String和Number)、sequence配置问题以及事务处理的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://stackoverflow.com/questions/11296361/how-to-create-id-with-auto-increment-on-oracle    


第一, 如果不是primary key id duplicated,那么只能说这个记录确实已经存在了;

第二,如果是主键冲突,那么情况就多了:


  • 主键是String类型的, 这个必然会发生冲突,改成number型
  • 主键是number型,sequence发生模式是cycle型,同是max又设置太小,这个好解决
  • 主键是number型,oracle是12版本前的,那么使用的是sequence,allocationSize是不是太小了?
  • 主键是number型,oracle是12版本前的,那么使用的是sequence,allocationSize大小合适,但是不是多个表共用同一个sequence?
  • 主键是number型,oracle是12版本前的,那么使用的是sequence,allocationSize大小合适,独立sequence,那么是不是使用事务处理?
  • 如果是使用事务处理,如果一次request请求大批量的insert操作,那么情况就又分很多种了,比如容器事务?JTA事务?或者JDBC事务?还是说内存溢出导致rollback,可这个溢出又可以分成很多层次?

第三,如果是自增长sequence失效的问题,那么在@SequenceGenerator中加入allocationSize = 1就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值