Read Uncommitted
x=1
T时间线:—————————————————————————-> commit
事务A:x=1, set x=2, set x=3 , rollback x=1
事务B:x=1, read x=2, reda x=3 read x=3(出现脏数据)
事务B可以读到事务A未提交的数据 这样事务A要是发生异常回滚数据 事务B读到的数据就是脏数据
Read committed
x=1
T时间线:—————————————————————————-> commit
事务A:x=1, set x=2, set x=3 commit
事务B:x=1, read x=1, reda x=1 read x=3 (不可重复读)
事务B 再一个事务里读到的两次数据不一样 出现了不可重复读的问题
Read repeatable
x=1
T时间线:—————————————————————————-> commit
事务A:x=1, set x=2, set x=3 commit
事务B:x=1, read x=1, reda x=1 read x=1 updatex=x+1 read x=4
可重复读 一个事务里select 操作的是一个快照 update delete insert 读到的数据才是最新版的 所以 x=x+1 之后是4 而不是2 当事务还没结束后 插入数据会让事务B产生幻读
Serialization
x=1
T时间线:—————————————————————————-> commit
事务A:x=1, set x=2, set x=3 commit
事务B:x=1, read x=1 阻塞…
串行化级别 行表都会被锁住,只能一个事务一个事务的顺序执行