事务并发之脏写
- 题记
- 脏写
- 防止脏写
题记
- 在《事务之概念》提到事务对应现实世界的状态转换,这个过程要满足4个特性
- 这世界,真理只在大炮射程之类,通往和平的道路,非“常人”可以驾驭
- 一个人生活按部就班,人多起来,难免鸡飞狗跳
- 同理现实世界的状态转换映射到数据库,满足4个特性也非一帆风顺
- 在数据库江湖,一个事务任我行,两个事务南北双雄,多事务江湖大乱
- 接下来便是并发事务,脏写的问题
脏写
-
一场正在进行的考试,某人正奋笔疾书
- 此时场外有人疯了,冲进考场,在你还未提交的试卷上疯狂作画
- 此时无人机突然出现,携带墨水炸弹,在你还未提交的试卷上…
- 此时外星人突然进入了考场,全部字迹变成外星语言,在你还未提交的试卷上…
- 此时,你爸给你打来电话:崽,俺们家拆迁啦赔了500万,MD你大笔一甩,考个P…
-
这个例子中,你是负责修改考卷的事务,不幸的是,其他干涉的事务太多
-
那么一个事务修改了另一个未提交事务修改的数据,便是发生了脏写
- 一个模型:
脏写记为P0,T1、T2事务并发执行情况,w=写,w1=事务1写,c1=事务1提交
P0:w1[x]...w2[x]... ((c1 or a1) and (c2 or a2) in any order )
- 一个例子:
w1[x=1]w2[x=2]w2[y=2]c2w1[y=1]c1
- T2对x修改提交,此时T1还没提交
- T1此时提交,是不是把x又改回1了?
- 当然不是,这里,两个事务改的是一条数据
- 你先写的为1,他给改了2,然后交卷了(此时T1再次提交是什么情况?现实案例无此情况)
- 大家也看到了,是他先动手的
- 一个模型:
防止脏写
- 大家也看到了,没有规则,没有方案约束,混乱不堪
- 所以为了考场安全,查分时成绩数据库能反应你真实水平
- 场外有大批警力,外部环境安全可靠
- 大家都有准考证,非考试相关人员无法进入
- 地球防卫部队时刻守护着太阳系安全,击退外星舰队
- 殖民火星计划已启动,拆迁希望落空,土地不值钱了…好好做卷子吧!您嘞!
- 也便是,mysql会设计各种方案,阻止这样的事情发生