时间: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
任何事务都只能等前一事务完全执行完再执行。 但是失去了并发性。
转载,有修改,我只是个搬运工。
我理解的数据库事务
标签: