auto commit
This commit is contained in:
@ -124,7 +124,7 @@ MySQL 中提供了两种封锁粒度:行级锁以及表级锁。
|
||||
|
||||
| - | X | S |
|
||||
| :--: | :--: | :--: |
|
||||
|X|YES|No|
|
||||
|X|Yes|No|
|
||||
|S|No|No|
|
||||
|
||||
### 2. 意向锁
|
||||
@ -140,10 +140,10 @@ MySQL 中提供了两种封锁粒度:行级锁以及表级锁。
|
||||
|
||||
| - | X | IX | S | IS |
|
||||
| :--: | :--: | :--: | :--: | :--: |
|
||||
|X |NO |NO |NO | NO|
|
||||
|IX |NO |YES|NO | YES|
|
||||
|S |NO |NO |YES| YES|
|
||||
|IS |NO |YES|YES| YES|
|
||||
|X |No |No |No | No|
|
||||
|IX |No |YES|No | Yes|
|
||||
|S |No |No |Yes| Yes|
|
||||
|IS |No |Yes|Yes| Yes|
|
||||
|
||||
## 封锁协议
|
||||
|
||||
@ -155,19 +155,62 @@ MySQL 中提供了两种封锁粒度:行级锁以及表级锁。
|
||||
|
||||
可以解决丢失修改问题,因为不能同时有两个事务对同一个数据进行修改,那么一个事务的修改就不会被覆盖。
|
||||
|
||||
| T<sub>1</sub> | T<sub>1</sub> |
|
||||
| :--: | :--: |
|
||||
| lock-x(A) | |
|
||||
| read A=20 | |
|
||||
| | lock-x(A) |
|
||||
| | wait |
|
||||
| write A=19 | |
|
||||
| commit | |
|
||||
| unlock-x(A) | |
|
||||
| | obtain |
|
||||
| | read A=19 |
|
||||
| | write A=21 |
|
||||
| | commit |
|
||||
| | unlock-x(A)|
|
||||
|
||||
**二级封锁协议**
|
||||
|
||||
在一级的基础上,要求读取数据 A 时必须加 S 锁,读取完马上释放 S 锁。
|
||||
|
||||
可以解决读脏数据问题,因为如果一个事务在对数据 A 进行修改,根据 1 级封锁协议,会加 X 锁,那么就不能再加 S 锁了,也就是不会读入数据。
|
||||
|
||||
| T<sub>1</sub> | T<sub>1</sub> |
|
||||
| :--: | :--: |
|
||||
| lock-x(A) | |
|
||||
| read A=20 | |
|
||||
| write A=19 | |
|
||||
| | lock-s(A) |
|
||||
| | wait |
|
||||
| rollback | |
|
||||
| A=20 | |
|
||||
| unlock-x(A) | |
|
||||
| | obtain |
|
||||
| | read A=20 |
|
||||
| | commit |
|
||||
| | unlock-s(A)|
|
||||
|
||||
**三级封锁协议**
|
||||
|
||||
在二级的基础上,要求读取数据 A 时必须加 S 锁,直到事务结束了才能释放 S 锁。
|
||||
|
||||
可以解决不可重复读的问题,因为读 A 时,其它事务不能对 A 加 X 锁,从而避免了在读的期间数据发生改变。
|
||||
|
||||
<div align="center"> <img src="../pics//20368ec9-972e-4d6a-8050-3948334bcda0.jpg" width="800"/> </div><br>
|
||||
| T<sub>1</sub> | T<sub>1</sub> |
|
||||
| :--: | :--: |
|
||||
| lock-s(A) | |
|
||||
| read A=20 | |
|
||||
| |lock-x(A) |
|
||||
| | wait |
|
||||
| read A=20| |
|
||||
| commit | |
|
||||
| unlock-s(A) | |
|
||||
| | obtain |
|
||||
| | read A=20 |
|
||||
| | write A=19|
|
||||
| | commit |
|
||||
| | unlock-X(A)|
|
||||
|
||||
### 2. 两段锁协议
|
||||
|
||||
|
Reference in New Issue
Block a user