数据库并发如何修改?

funnyone 2013-10-19 10:13:46
问下如何 修改数据库 实现 并发情况下 数据完整性。比如只剩下100元,多个线程都要这100元。(数据库修改)?
我们现在的做法是 在修改前做数据库金额校验 然后直接修改。
我以前问过项目经理 中间的时间呢? 他说中间时间太短 银行项目也不会考虑的?
我们直接使用的JDBC做的。
昨天面试问道这个问题。
问题:
1.有做过银行项目的,你们如何考虑这段时间?校验时候 行锁表?
2.其他办法?
...全文
516 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
funnyone 2013-10-20
  • 打赏
  • 举报
回复
引用 9 楼 Inhibitory 的回复:
多线程这个不应该在数据库级控制,应该是在业务逻辑层控制,就是多个线程共享一个资源,经典的多线程问题,如用 SharedResource sharedResource = new SharedResource(); Thread t1 = new Thread(sharedResource); Thread t2 = new Thread(sharedResource); Thread t2 = new Thread(sharedResource); sharedResource里面的操作加锁控制这种方式,操作数据库的线程操作sharedResource的数据。
你们是这样做的吗? 比如说在多个action ,要跟新 zbz 表,先判断剩余金额是否大于100,是减去100.
funnyone 2013-10-19
  • 打赏
  • 举报
回复
引用 6 楼 abccba9978 的回复:
土豪啊,你们项目经理要命啊,误导的你够呛的
问题是我们的那个项目确实是这麽做的。
api工厂 2013-10-19
  • 打赏
  • 举报
回复
土豪啊,你们项目经理要命啊,误导的你够呛的
funnyone 2013-10-19
  • 打赏
  • 举报
回复
引用 4 楼 huxiweng 的回复:
把校验的代码和减去100块的代码写到一个同步方法中明白吗?
你不觉得很不合理吗?尤其是减去金额是多处源(方法)修改? 这样效率很低的? 你们是这样做的吗?
teemai 2013-10-19
  • 打赏
  • 举报
回复
把校验的代码和减去100块的代码写到一个同步方法中明白吗?
funnyone 2013-10-19
  • 打赏
  • 举报
回复
你说的如何使用同步? 这些都在action中完成的。
funnyone 2013-10-19
  • 打赏
  • 举报
回复
引用 1 楼 huxiweng 的回复:
我了个去,你们项目经理坑你。 这个必须要事务控制,不懂事务去搜索下。 简单给你说下原理,事务的作用就是保证你的多个更新/插入/修改数据,要么都成功,要么都不做。 然后再说下,银行这些数据一般不是Java代码去执行最终的CRUD。你一般就最多调用到一个接口,另外操作数据库,必须使用同步。
我知道事务啊。 我说的多个线程调用同一个方法。 在这个事务中先校验剩余金额,然后通过的话,减去100元。 在校验与减去100元时间内,如何处理的??
teemai 2013-10-19
  • 打赏
  • 举报
回复
我了个去,你们项目经理坑你。 这个必须要事务控制,不懂事务去搜索下。 简单给你说下原理,事务的作用就是保证你的多个更新/插入/修改数据,要么都成功,要么都不做。 然后再说下,银行这些数据一般不是Java代码去执行最终的CRUD。你一般就最多调用到一个接口,另外操作数据库,必须使用同步。
Inhibitory 2013-10-19
  • 打赏
  • 举报
回复
多线程这个不应该在数据库级控制,应该是在业务逻辑层控制,就是多个线程共享一个资源,经典的多线程问题,如用 SharedResource sharedResource = new SharedResource(); Thread t1 = new Thread(sharedResource); Thread t2 = new Thread(sharedResource); Thread t2 = new Thread(sharedResource); sharedResource里面的操作加锁控制这种方式,操作数据库的线程操作sharedResource的数据。
teemai 2013-10-19
  • 打赏
  • 举报
回复
引用 5 楼 funnyone 的回复:
[quote=引用 4 楼 huxiweng 的回复:] 把校验的代码和减去100块的代码写到一个同步方法中明白吗?
你不觉得很不合理吗?尤其是减去金额是多处源(方法)修改? 这样效率很低的? 你们是这样做的吗?[/quote] 银行数据库的操作不是Java做的,IBM大机

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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