数据库并发控制
系列 - mysql数据库
目录
什么是并发
并发带来的问题
- 丢失修改 我修改的东西没生效。比如说我把票价改成 99 元,结果还是原来的 299 元
- 读脏数据 比如,你要读取数据库中的字段 A、字段 B,你读取时恰巧有其他用户正在更新这 2 个字段,而且是先更新 A、再更新 B,如果那个用户更新一半你就读取了,也就是说更新了 A,正打算要更新 B 但尚未更新时,你就读取了,此时你得到的就是脏数据。
- 不可重复读 我在一个事务中,连续两次读到的数据不一样。比如我刚开始读到银行余额为 10 元。此时单位突然给发工资 100 到这张卡,那么我第二次读就变成了 110 元。
解决方法 1、排它锁:也叫写锁 X 锁 2、共享锁:也叫读锁 S 锁
封锁协议
- 一级封锁协议 修改时,必须加 X 锁,直到结束
- 二级封锁协议 读的时候,加 S 锁,读完就放
- 三级封锁协议 读的时候,加 S 锁,直到事务结束
一级锁协议:解决丢失修改 二级锁协议:解决读脏数据 三级锁协议:解决不可重复度
可串行性
假设多种情况都可以,然后获得结果, 如果并发执行的结果跟上面的结果里面任意一个一样就可以
事务 T1:读取 B, A=B+1, 写回 A 事务 T2:读取 A, B=A+1, 写回 B
那么结果假设先 T1,在 T2,那么 A=4, B =3; 假设先 T2, 那么=3, B =4;