数据库并发操作

D_A_O 2017-10-10 04:41:19
在现在的项目中,有这样的一个要求:有X个用户同时访问后台,后台里,先判断表A中是否有结果(X个用户最终只能生成一个结果,取X个用户中之前操作的最小值),若结果已在数据库插入,则不插入,否则向表A中插入一条数据。
现在的问题是,第一个用户查询表A无结果,插入数据;第二个用户查询还是无结果,再次插入数据;第三个用户查询有结果,不插入......
我先是加入了synchronized,但是不行;然后在判断之前我加上了行锁,“select 1 from A s where s.c_e = ? for update ”,结果还是不行。
请指教。
...全文
331 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wandier 2017-10-12
  • 打赏
  • 举报
回复
有两种方式比较好,一个是select语句和update语句写在一条语句中,另一个是加乐观锁
alex259 2017-10-11
  • 打赏
  • 举报
回复
取之前获得UUID,然后对这个UUID一致的行进行操作,操作完毕并更新UUID,如果UUID不一致,则回滚,能不能满足你的需求?
fengshengjie 2017-10-10
  • 打赏
  • 举报
回复
用 sequence + serially_reusable 包,包中定义一个变量,初始值是0,调用的时候,如果该变量值是0,就从sequence中获取一个值,否则就直接使用这个变量值。这样可行否?
D_A_O 2017-10-10
  • 打赏
  • 举报
回复
引用 2 楼 acen_chen 的回复:
数据重复吗?创建唯一索引不行吗
不能,因为表A在其他业务的时候可以废除结果,在创建新结果,而且这个结果是由其他表的主键关联来的
D_A_O 2017-10-10
  • 打赏
  • 举报
回复
只能插入一行数据
acen_chen 2017-10-10
  • 打赏
  • 举报
回复
数据重复吗?创建唯一索引不行吗
碧水幽幽泉 2017-10-10
  • 打赏
  • 举报
回复
A表只有一个字段,只能插入一行数据吗?
如果不是,就不好控制并发了。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧