找回密码
 立即注册

QQ登录

只需一步,快速开始

star 活字格认证
金牌服务用户   /  发表于:2024-12-30 11:22  /   查看:55  /  回复:1
1金币

外联库oracle的ID字段主要是通过自动编号完成,选择了“如果编号被占用,则在存储时重新设置一个编号”,但是在高并发下还是会出现编号重复的情况,导致报唯一约束的错误。
(1)如何解决?(2)“如果编号被占用,则在存储时重新设置一个编号”这个项目的具体作用是什么?

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

您好,这个问题,先解释一下,自动编号的生成,是活字格自已写的逻辑,就是根据用户设置的编号规则去生成,然后勾选了存储时重新设置一个编号的话 在生成时会这样去操作, 使用数据表操作去新增数据的时候,产品会去数据表中查询要插入的编号是否已经存在,如果已经存在就重新生成一个表格再插入,比如规则是001 002 003 ... 现在库里已经有了001 那这是数据表操作就会自动生成002的编号去执行插入。 但是数据表操作这 ...

1 个回复

倒序浏览
最佳答案
最佳答案
Lay.Li悬赏达人认证 活字格认证
超级版主   /  发表于:2024-12-30 11:22:52
来自 2#
您好,这个问题,先解释一下,自动编号的生成,是活字格自已写的逻辑,就是根据用户设置的编号规则去生成,然后勾选了存储时重新设置一个编号的话
在生成时会这样去操作,


使用数据表操作去新增数据的时候,产品会去数据表中查询要插入的编号是否已经存在,如果已经存在就重新生成一个表格再插入,比如规则是001 002 003 ...
现在库里已经有了001 那这是数据表操作就会自动生成002的编号去执行插入。


但是数据表操作这个命令最终还是转化为sql去执行的,在这个生成002的命令转化为sql执行插入数据之前,如果并发量比较高,有另外一个用户也执行了数据表操作命令的话,那么他得到的自动编号也是002,就会产生这个报错了


解决方案的话,可以在服务端中加事务,然后使用异常捕获命令。在try的子命令中写这个数据表新增的命令, 如果失败了,就再重新调用自已的逻辑,但是这种方式也只是降低机率,并不能完全解决问题。


也可以尝试使用Oracle数据库本身的自动编号去实现自动编号的逻辑


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部