时间:2021-07-01 10:21:17 帮助过:2人阅读
事务m2的操作包括
读B,读A,
写B,写A,
提交AB
事务m3的操作包括
读A,读B,
写A,写B,
提交AB
事务m4的操作包括
写D,
提交D
1.若未授权读取ReadUncommitted
m1读A
,B
,写了A
但没写B
此时m2不可以写B,可以读取A
和B
,但是B
是脏读。
隔离级别使用了“排他写锁”。
2.若授权读取ReadCommitted
m1读A
,B
,写了A
但没写B
此时m2不可以写B
,可以读取A
,不能读取B
,因为B
是脏读。
隔离级别使用了“排他写锁”。
m1读写了A
,B
,提交A``B
,
m3提交了A``B
此时m1准备第二次A是允许的。
隔离级别使用了“瞬间共享读锁”。
(但由于第二次读产生了不可重复读的问题,事务1脱力了元自行,因为逻辑上看事务1中被插入了3,影响了A的余额50%的计算。)
3.若可重复读取RepeatableRead
m1读A
,B
,写了A
。
但没写B
此时m2不可以写B
,可以读取A
,不能读取B
,因为B
是脏读。
隔离级别使用了“排他写锁”。
m1读写了A
,B
,提交A``B
,
m4提交了D
此时m3是能读不能写A
并更新提交的。
此时m4是能读能能插入D
的。隔离级别使用了“共享读锁”。
(和ReadCommitted比RepeatableRead区别对已经提交的事务可以进行读,但不能写,但是同一张表可以插入新的记录。)
4.序列化Serializable
任何事务都只能等前一事务完全执行完再执行。 但是失去了并发性。
转载,有修改,我只是个搬运工。
我理解的数据库事务
标签: