并发操作与数据的不一致性
最近做的《选修课系统》需要考虑这样一个问题:数据库的并发操作带来的数据库数据不一致问题因为是全校性选修课,同一时间点大批学生选课,那么必然存在多名学生同时对同一数据进行操作是的问题,如果这种并发操作不加以控制的话,必会造成数据的不一致。 一
最近做的《选修课系统》需要考虑这样一个问题:数据库的并发操作带来的数据库数据不一致问题——因为是全校性选修课,同一时间点大批学生选课,那么必然存在多名学生同时对同一数据进行操作是的问题,如果这种并发操作不加以控制的话,必会造成数据的不一致。
一直知道有这种问题,并且知道这种问题的解决方法——加锁;但是有些东西之前了解的并不是很透彻,于是好好研究了一天,觉得理解的还可以,先总结一部分。
1,什么是并发操作?
数据库的一个重要特征是:支持数据共享,也就是说允许多个用户程序并行地存取数据库中的数据;那么,多用户或多事物可能同时对同一数据进行操作,这成为并发操作。
2,并发操作可能带来的影响?
如果不对并发操作进行控制的话,那么就会存取不正确的数据,破坏数据的完整性。——为什么这么说?下面进行介绍
在此之前,先说一下事务的概念。
3,什么是事务?
对一件完整的事儿,要么做完整,要么都不做。例如:学生选课—学生选上课时,需要将选课信息写入选课表的同时,更新课程表中的课程余量;如果在添加选课信息时,中断了(不能进行余量更新),那么就会事务回滚,即,数据回滚到没选课之前。
Begin Transaction
选课表中添加选课信息;
更新课程表中的课程余量;
Commit
RollBac
事务的SQL语句:
Begin Transaction开始事务
Commit提交事务
RollBack回滚
(注:事务中的多条SQL语句也是一条条执行的,当所有语句执行完后,提交事务,如果其中一条中断,则事务回滚所有操作回到语句执行之前)
事务的并发主要是为了提高效率,但是,同时它也带来了一定问题
4,并发操作带来的问题?
之前讲过并发操作——多用户或多事务同时对同一数据进行操作;
因为事务中的语句也是一条条执行的,所以存在多用户多事务同时对同一数据进行操作的情况;
并发操作带来的问题:
(1)丢失修改
(2)脏读
(3)不可重复读
4.1丢失修改
当两个或多个事务(或两个或多个用户)选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在(或每个用户操作时并不会考虑同一时刻是否有别的用户进行着同样的操作)。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。
例子1:事务T1,事务T2,数据库中数据R=1000
a.t1时刻,事务T1读取R=1000;
b.过了一会儿 t2时刻,事务T2读取R=1000;
c.t3时刻,事务T1修改R=R-200(那么R=800)写入数据库(此时,数据库中R=800);
d.过了一会儿 t4时刻,事务T2修改R=R-100(因为在t2时刻读到的数据为R=1000,那么修改后R=900)写入数据库(此时,数据库中R=900)
那么最终,数据库中R=900;数据对吗?当然不对,因为T1、T2分别对R进行了-200 -100操作,最终数据应为R=700;事务T2的修改覆盖了T1的修改 ——丢失修改问题
例子2:选课:学生A、学生B、课程1的余量=20
a.学生A选择课程1时,先读出课程余量20
b.然而同一时刻(也可是不同时刻,只要在学生A更新数据之前),学生B也读出了课程1的余量20,
c.学生A选择此课程,课程1余量-1,写入数据库,此时课程1的余量=19;
d.学生B选择此课程,课程1余量-1(因为之前读出的课程1余量为20,-1后为19),写入数据库,此时课程1的余量=19;
课程余量=19 数据正确吗?不正确。实际情况课程余量应更新为18;——B的修改覆盖了A的修改 —— 丢失修改问题。
解决办法:加锁,只允许并发一个更新事务。
4.2脏读
当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,
另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个
事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。
例子1:事务T1,事务T2,数据库中数据R=1000;
T1:
Begin Transaction开始事务T1
ReadR=1000;(1)
R=R-200;(2)此时R=800
R=R+100;(3)此时R=900
Commit提交事务T1
a.当事务T1进行到第(2)后,即,数据库中的数据R=800时;
b.事务T2开始读R的值,读出的值为R=800;但此时事务T1还没有进行完整,还未提交事务;
c.之后事务T1进行第(3)步R=R+100,此时R=900 事务T1提交,此时数据库中R=900;
那么在事务T1提交事务之前,事务T2读出的数据(R=800)为脏数据;
例子2:
a.张三的工资为2000,元老板把张三的工资改为了8000元(但未提交事务)
2.张三查看自己的工资 ,发现工资变为了8000元
3.而后老板发现改错了,回滚了事务,张三的工资又变回了2000元
那么,张三读取的工资8000元就是脏数据。
解决办法:如果在第一个事务提交前,任何其他事务不可读取其修改过的值,则可以避免该问题。
4.3不可重复读
当第二个事务多次访问同一行而且每次读取不同的数据时,会发生不一致的分析问题。不一致的分析与未确认的相关性类似,因为其它事务也是正在更改第二个事务正在读取的数据。然而,在不一致的分析中,第二个事务读取的数据是由已进行了更改的事务提交的。而且,不一致的分析涉及多次(两次或更多)读取同一行,而且每次信息都由其它事务更改;因而该行被非重复读取。
在一个事务中前后两次读取的结果并不致,导致了不可重复读。
例子1:事务T1、事务T2、张三的工资=1000
a.事务T1中,张三读取了自己的工资为1000元,操作并没有完成
b.此时(事务T1读取了张三工资为1000元)事务2中,修改了张三的工资为2000元,并提交了事务.
c.此时(事务T1读取了张三工资为1000元,事务T2修改了张三的工资为2000元)在事务1中,张三再次读取自己的工资时,工资变为了2000
那么,同一个事务中,前后读取的数据不一致 —— 不可重复读问题。
解决办法:如果只有在修改事务完全提交之后才可以读取数据,则可以避免该问题。
总结:
(1)事务的并发主要是为了提高效率,但是,同时它也带来了一定问题——丢失修改、读脏数据、不可重复读
(2)结合生活中实例,理解丢失修改、读脏数据、不可重复读问题。
个人理解,如果哪里有理解偏差,忘纠正!
下篇博客会总结“锁”的概念,并解释“锁”是如何解决并发造成的数据不一致问题。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

0.这篇文章干了啥?提出了DepthFM:一个多功能且快速的最先进的生成式单目深度估计模型。除了传统的深度估计任务外,DepthFM还展示了在深度修复等下游任务中的最先进能力。DepthFM效率高,可以在少数推理步骤内合成深度图。下面一起来阅读一下这项工作~1.论文信息标题:DepthFM:FastMonocularDepthEstimationwithFlowMatching作者:MingGui,JohannesS.Fischer,UlrichPrestel,PingchuanMa,Dmytr

谷歌力推的JAX在最近的基准测试中性能已经超过Pytorch和TensorFlow,7项指标排名第一。而且测试并不是在JAX性能表现最好的TPU上完成的。虽然现在在开发者中,Pytorch依然比Tensorflow更受欢迎。但未来,也许有更多的大模型会基于JAX平台进行训练和运行。模型最近,Keras团队为三个后端(TensorFlow、JAX、PyTorch)与原生PyTorch实现以及搭配TensorFlow的Keras2进行了基准测试。首先,他们为生成式和非生成式人工智能任务选择了一组主流

哭死啊,全球狂炼大模型,一互联网的数据不够用,根本不够用。训练模型搞得跟《饥饿游戏》似的,全球AI研究者,都在苦恼怎么才能喂饱这群数据大胃王。尤其在多模态任务中,这一问题尤为突出。一筹莫展之际,来自人大系的初创团队,用自家的新模型,率先在国内把“模型生成数据自己喂自己”变成了现实。而且还是理解侧和生成侧双管齐下,两侧都能生成高质量、多模态的新数据,对模型本身进行数据反哺。模型是啥?中关村论坛上刚刚露面的多模态大模型Awaker1.0。团队是谁?智子引擎。由人大高瓴人工智能学院博士生高一钊创立,高

在iPhone上面临滞后,缓慢的移动数据连接?通常,手机上蜂窝互联网的强度取决于几个因素,例如区域、蜂窝网络类型、漫游类型等。您可以采取一些措施来获得更快、更可靠的蜂窝互联网连接。修复1–强制重启iPhone有时,强制重启设备只会重置许多内容,包括蜂窝网络连接。步骤1–只需按一次音量调高键并松开即可。接下来,按降低音量键并再次释放它。步骤2–该过程的下一部分是按住右侧的按钮。让iPhone完成重启。启用蜂窝数据并检查网络速度。再次检查修复2–更改数据模式虽然5G提供了更好的网络速度,但在信号较弱

最近,军事圈被这个消息刷屏了:美军的战斗机,已经能由AI完成全自动空战了。是的,就在最近,美军的AI战斗机首次公开,揭开了神秘面纱。这架战斗机的全名是可变稳定性飞行模拟器测试飞机(VISTA),由美空军部长亲自搭乘,模拟了一对一的空战。5月2日,美国空军部长FrankKendall在Edwards空军基地驾驶X-62AVISTA升空注意,在一小时的飞行中,所有飞行动作都由AI自主完成!Kendall表示——在过去的几十年中,我们一直在思考自主空对空作战的无限潜力,但它始终显得遥不可及。然而如今,

特斯拉机器人Optimus最新视频出炉,已经可以在厂子里打工了。正常速度下,它分拣电池(特斯拉的4680电池)是这样的:官方还放出了20倍速下的样子——在小小的“工位”上,拣啊拣啊拣:这次放出的视频亮点之一在于Optimus在厂子里完成这项工作,是完全自主的,全程没有人为的干预。并且在Optimus的视角之下,它还可以把放歪了的电池重新捡起来放置,主打一个自动纠错:对于Optimus的手,英伟达科学家JimFan给出了高度的评价:Optimus的手是全球五指机器人里最灵巧的之一。它的手不仅有触觉

多模态文档理解能力新SOTA!阿里mPLUG团队发布最新开源工作mPLUG-DocOwl1.5,针对高分辨率图片文字识别、通用文档结构理解、指令遵循、外部知识引入四大挑战,提出了一系列解决方案。话不多说,先来看效果。复杂结构的图表一键识别转换为Markdown格式:不同样式的图表都可以:更细节的文字识别和定位也能轻松搞定:还能对文档理解给出详细解释:要知道,“文档理解”目前是大语言模型实现落地的一个重要场景,市面上有很多辅助文档阅读的产品,有的主要通过OCR系统进行文字识别,配合LLM进行文字理

2024QS世界大学学科排名来了!总体和23年变化不大。根据官网信息,2024QS世界大学学科排名涵盖了55个细分学科和5大学术领域。共有1559所高校参与了排名,其中64所高校是今年的新面孔(也就是说2023年的排名中没有出现)。而在这64所高校中,又有14所是真真正正第一次出现的。其中就包含了中国科学院大学。据精分学科来说,音乐(Music)是今年推出的新科目。此外,数据科学和人工智能排名得到了扩充,排名新加入了51所高校。总榜排名总榜前五名分别是:麻省理工学院、剑桥大学、牛津大学、哈佛大学
