加锁进行数据库更新

来源:互联网 发布:上海的人工智能企业 编辑:程序博客网 时间:2024/05/23 12:48

首先,多用户并发修改同一条记录时,肯定是后提交的用户将覆盖掉前者提交的结果了。
这个直接可以使用加锁机制去解决,乐观锁或者悲观锁。
乐观锁,就是在数据库设计一个版本号的字段,每次修改都使其+1,这样在提交时比对提交前的版本号就知道是不是并发提交了,但是有个缺点就是只能是应用中控制,如果有跨应用修改同一条数据乐观锁就没办法了,这个时候可以考虑悲观锁。
悲观锁就是直接在数据库层面将数据锁死,类似于oralce中使用select xxxxx from xxxx where xx=xx for update,这样其他线程将无法提交数据。
除了加锁的方式也可以使用接收锁定的方式,思路是在数据库中设计一个状态标识位,用户在对数据进行修改前,将状态标识位标识为正在编辑的状态,这样其他用户要编辑此条记录时系统将发现有其他用户正在编辑,则拒绝其编辑的请求,类似于你在操作系统中某文件正在执行,然后你要修改该文件时,系统会提醒你该文件不可编辑或删除。

另外,我想你说的并发应该是我前面介绍的内容,但是实际上的并发并非如此,还有线程的并发问题,有多个线程同时访问一个方法,前一个线程尚未执行完成时,第二个线程进入到方法中执行,将可能导致方法中定义的某些变量的值发生改变,这样第二个线程的执行结果将会不可预期,这种一般发生在并发量非常高的应用中,解决的办法是进行线程同步,但是这个方法对性能的开销非常大,另一种方式可以使用线程排队,具体问题你可以google下,很多相关介绍,这边就只提供一个思路,不再啰嗦了。

原创粉丝点击