文档章节

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

 什么是程序员
发布于 2016/12/09 17:04
字数 624
阅读 957
收藏 0
点赞 0
评论 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
如何处理前任程序员留下的代码

原文出处:Justin Albano 译文出处:开源中国 身为一个软件工程师,我们不可避免的会遇到这样一些问题:不得不修改别人的代码,或者在别人的代码中添加新的功能。我们并不熟悉这些代码,它也...

Justin Albano
2017/11/28
0
0
AngularJS 中的一些坑

本文由伯乐在线 -蔡蔡 翻译。未经许可,禁止转载! 英文出处:branchandbound。欢迎加入翻译组。 最近几个月频繁的跟AngularJS打交道,对于web应用开发来说Angular真的是一个神奇的框架,但是...

伯乐在线
2013/12/07
0
0
为什么面向对象编程是有用的?(以一个角色扮演游戏为例)

本文由伯乐在线 -Janzou 翻译,艾凌风 校稿。未经许可,禁止转载! 英文出处:inventwithpython。欢迎加入翻译组。 本文面向的是那些刚刚接触编程,可能已经听说过”面向对象编程”,”OOP”...

伯乐在线
2014/12/31
0
0
每天一个 Linux 命令(58): telnet 命令

原文出处:peida telnet命令通常用来远程登录。telnet程序是基于TELNET协议的远程登录客户端程序。Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户...

peida
2017/02/05
0
0
Ruby 和 Python 分析器是如何工作的?

原文出处:Julia Evans 译文出处:开源中国 你好! 我作为一名编写Ruby profiler的先驱,我想对现有的Ruby和Python profiler如何工作进行一次调查。 这也有助于回答很多人的问题:“你怎么写...

Julia Evans
2017/12/24
0
0
每天一个 Linux 命令(59): rcp 命令

原文出处:peida rcp代表“remote file copy”(远程文件拷贝)。该命令用于在计算机之间拷贝文件。rcp命令有两种格式。第一种格式用于文件到文件的拷贝;第二种格式用于把文件或目录拷贝到另...

peida
2017/02/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周一乱弹 —— 你的朋友圈有点生锈了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @Devoes :分享Trademark的单曲《Only Love (电视剧《妙手仁心 II》插曲)》: 《Only Love (电视剧《妙手仁心 II》插曲)》- Trademark 手机党少...

小小编辑
今天
69
5
【面试题】盲人坐飞机

有100位乘客乘坐飞机,其中有一位是盲人,每位乘客都按自己的座位号就坐。由于盲人看不见自己的座位号,所以他可能会坐错位置,而自己的座位被占的乘客会随便找个座位就坐。问所有乘客都坐对...

garkey
今天
1
0
谈谈神秘的ES6——(二)ES6的变量

谈谈神秘的ES6——(二)ES6的变量 我们在《零基础入门JavaScript》的时候就说过,在ES5里,变量是有弊端的,我们先来回顾一下。 首先,在ES5中,我们所有的变量都是通过关键字var来定义的。...

JandenMa
今天
1
0
arts-week1

Algorithm 594. Longest Harmonious Subsequence - LeetCode 274. H-Index - LeetCode 219. Contains Duplicate II - LeetCode 217. Contains Duplicate - LeetCode 438. Find All Anagrams ......

yysue
今天
1
0
NNS拍卖合约

前言 关于NNS的介绍,这里就不多做描述,相关的信息可以查看NNS的白皮书http://doc.neons.name/zh_CN/latest/nns_background.html。 首先nns中使用的竞价货币是sgas,关于sgas介绍可以戳htt...

红烧飞鱼
今天
1
0
Java IO类库之管道流PipeInputStream与PipeOutputStream

一、java管道流介绍 在java多线程通信中管道通信是一种重要的通信方式,在java中我们通过配套使用管道输出流PipedOutputStream和管道输入流PipedInputStream完成线程间通信。多线程管道通信的...

老韭菜
今天
0
0
AB 压力测试

Ubuntu 安装AB apapt-get install apache2-utils 使用AB 压力测试 -c 并发数 -n请求总数 ab -c 3000 -n 10000 http://localhost/test/index.php AB只能测试localhost 返回结果 This is Apac......

xiawet
今天
0
0
用Python绘制红楼梦词云图,竟然发现了这个!

Python在数据分析中越来越受欢迎,已经达到了统计学家对R的喜爱程度,Python的拥护者们当然不会落后于R,开发了一个个好玩的数据分析工具,下面我们来看看如何使用Python,来读红楼梦,绘制小...

猫咪编程
今天
1
0
Java中 发出请求获取别人的数据(阿里云 查询IP归属地)

1.效果 调用阿里云的接口 去定位IP地址 2. 代码 /** * 1. Java中远程调用方法 * http://localhost:8080/mavenssm20180519/invokingUrl.action * @Title: invokingUrl * @Description: * @ret......

Lucky_Me
今天
1
0
protobuf学习笔记

相关文档 Protocol buffers(protobuf)入门简介及性能分析 Protobuf学习 - 入门

OSC_fly
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部