文档章节

多用户同时修改一条数据  ,并发问题

 什么是程序员
发布于 2016/12/09 17:04
字数 624
阅读 1086
收藏 0

 

如果两个用户同时打开一条记录,修改后提交会产生更新冲突

办法有三:

1.打开同时锁定表的记录 

2.用lock对修改方法加锁

2.捕获错误,撤消其中一个用户的修改

 

场景描述如下:

用户A、B同时打开一个页面,页面显示,客户表T_CUSTOMER字段(C_NAME、C_AGE)

姓名:张三,年龄:25

1,A 将姓名“张三”改为“张三1”,然后保存

2,B 将年龄“25”改为“30”,然后保存

这样A的操作就被覆盖了,姓名又变回“张三”了

 

解决方案

方法一:

锁表,但是被锁的表可以被查询   却不能增,删,改表,虽能够防止丢失更新和不可重复写这类并发问题,但是它会影响并发性能

 

方法二:

在业务代码中用lock对修改方法加锁,运行时注入单例,并且对方法加同步锁,保证了业务数据的正确性, 但是效率低下,用户在使用中不方便,背离了系统可以并发操作的原则

 

方法三:

数据校验机制,不做数据库层次上的锁定

给表添加一字段:LAST_UPDATE,即最后更新时间

姓名:张三,年龄:25,LAST_UPDATE:2016-06-17 13:45:00

 

1,A 将姓名“张三”改为“张三1”,然后保存

更新数据时WHERE条件里多一条件:AND LAST_UPDATE = '2016-06-17 13:45:00'

修改记录时同时将当前时间“2016-10-17 13:46:00”赋值给LAST_UPDATE字段,更新成功

2,B 将年龄“25”改为“30”,然后保存

B更新数据时WHERE条件里也有这个条件:AND LAST_UPDATE = '2016-06-17 13:45:00',此时LAST_UPDATE的值已经在A修改记录时变成2016-06-17 13:46:00

下面要做的就是给出提示了:该记录读出后已经被再次修改

 

备注:如果A读了数据,未来及更新,B先更新了数据, 那么A将提交不上数据,因为LAST_UPDATE 已经失效,这样就造成了A重新读取数据,重新填写表单信息。 这也是乐观锁一个缺点,可以在更新前临时保存A填写的数据,再在跳转页中加载这些数据,保证了用户不用麻烦再次输入这些数据,更新成功则清空这些临时数据

本文转载自:http://blog.163.com/mary_xiaoman/blog/static/1678413942016524104133498/

共有 人打赏支持
粉丝 4
博文 66
码字总数 4194
作品 0
南昌
程序员
MySQL 在并发场景下的问题及解决思路

原文出处:李平 1、背景 对于数据库系统来说在多用户并发条件下提高并发性的同时又要保证数据的一致性一直是数据库系统追求的目标,既要满足大量并发访问的需求又必须保证在此条件下数据的安...

李平
05/11
0
0
性能测试的艺术

原文出处:磁针石 为什么要进行性能测试? 什么是好的与坏的性能?为什么性能测试在软件开发生命周期(SDLC software development life cycle)中很重要? 性能不佳的应用通常无法实现企业预期...

磁针石
2016/03/21
0
0
提升网站访问速度的 SQL 查询优化技巧

原文出处:Delicious Brains 译文出处:开源中国 你一定知道,一个快速访问的网站能让用户喜欢,可以帮助网站从Google 上提高排名,可以帮助网站增加转化率。如果你看过网站性能优化方面的文...

Delicious Brains
2017/12/09
0
0
NoSQL数据库概览及其与SQL语法的比较

本文作者:伯乐在线 -周兆熊 。未经作者许可,禁止转载! 欢迎加入伯乐在线专栏作者。 HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,同时也是知名的NoSQL数据库之一。NoS...

伯乐在线
2015/11/13
0
0
Ubuntu 搭建 Elasticsearch 6 集群流程

为何要搭建 Elasticsearch 集群 凡事都要讲究个为什么。在搭建集群之前,我们首先先问一句,为什么我们需要搭建集群?它有什么优势呢? 高可用性 Elasticsearch 作为一个搜索引擎,我们对它的...

崔庆才
08/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

xilinx资源

本系列教学视频由赛灵思高级战略应用工程师带领你:从零开始,一步步深入 掌握 HLS 以及 UltraFAST 设计方法,帮助您成为系统设计和算法加速的大拿! http://www.eetrend.com/topics/2018-0...

whoisliang
5分钟前
0
0
=====BJmeter性能测试小接=====

一、性能测试分类 1、负载测试: 通过逐步加压的方法,达到既定的性能阈值的目标,阈值的设定应是小于某个值,如cpu使用率小于等于80% 2、压力测试: 通过逐步加压的方法,使得系统的某些资源...

覃光林
8分钟前
0
0
企业级开源四层负载均衡解决方案--LVS

网盘链接 企业级开源四层负载均衡解决方案--LVS 本课程将在Linux环境下,学习配置使用LVS,对Web集群和MySQL集群进行负载均衡,并结合利用Keepalived实现负载均衡器的高可用,实现对后端Rea...

qq__2304636824
14分钟前
0
0
Windows上安装Spacemacs

emacs安装 下载地址emacs 安装比较简单,解压后执行\bin\addpm.exe即可 emacs配置 emacs的默认配置文件路径和.emacs.d文件夹都是在Windows主目录下的 C:\Users\Administrator\AppData\Roami...

yxmsw2007
30分钟前
0
0
OSChina 周一乱弹 —— 鱼生不值得

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @瘟神灬念:分享新裤子的单曲《没有理想的人不伤心 (Remix版)》: 《没有理想的人不伤心 (Remix版)》- 新裤子 手机党少年们想听歌,请使劲儿戳...

小小编辑
今天
171
9

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部