日期:2014-05-17  浏览次数:20626 次

数据库并发如何修改?
本帖最后由 funnyone 于 2013-10-19 10:15:45 编辑
问下如何 修改数据库 实现 并发情况下 数据完整性。比如只剩下100元,多个线程都要这100元。(数据库修改)?
我们现在的做法是 在修改前做数据库金额校验 然后直接修改。
我以前问过项目经理 中间的时间呢?  他说中间时间太短 银行项目也不会考虑的?
我们直接使用的JDBC做的。
昨天面试问道这个问题。
问题:
1.有做过银行项目的,你们如何考虑这段时间?校验时候 行锁表?
2.其他办法?

------解决方案--------------------
我了个去,你们项目经理坑你。
这个必须要事务控制,不懂事务去搜索下。
简单给你说下原理,事务的作用就是保证你的多个更新/插入/修改数据,要么都成功,要么都不做。
然后再说下,银行这些数据一般不是Java代码去执行最终的CRUD。你一般就最多调用到一个接口,另外操作数据库,必须使用同步。
------解决方案--------------------
把校验的代码和减去100块的代码写到一个同步方法中明白吗?

------解决方案--------------------
土豪啊,你们项目经理要命啊,误导的你够呛的
------解决方案--------------------
引用:
Quote: 引用:

把校验的代码和减去100块的代码写到一个同步方法中明白吗?


你不觉得很不合理吗?尤其是减去金额是多处源(方法)修改?
这样效率很低的?
你们是这样做的吗?

银行数据库的操作不是Java做的,IBM大机

------解决方案--------------------
多线程这个不应该在数据库级控制,应该是在业务逻辑层控制,就是多个线程共享一个资源,经典的多线程问题,如用
SharedResource sharedResource = new SharedResource();
Thread t1 = new Thread(sharedResource);
Thread t2 = new Thread(sharedResource);
Thread t2 = new Thread(sharedResource);
sharedResource里面的操作加锁控制这种方式,操作数据库的线程操作sharedResource的数据。