数据库事务的隔离级(从低到高)
1. Read UnCommitted (读未提交)
2. Read Committed (读已提交) 解决脏读
3. Repeatable Read (可重复读) 解决重复读
4. Serializable (串行化) 解决幻读
四种事务的作用
我们讨论事务场景大多在并发的时候,因此多是围绕事务并发的情况来讲
1. Read UnCommitted (读未提交)
两个并发事务,事务A提交数据,事务B读取数据,事务B读到了事务A没有commit的数据,出现这种情况则出现了脏读,如何避免脏读,就出现了下面的事务隔离级别
2.
Read Committed (读已提交)
两个并发事务,事务A更改数据,事务B更改数据,事务A事先读取了数据,这是B进来也读取了数据,更改数据并提交了事务,当A再去更改数据的时候发现,数据已经不正确了,
虽然Read committed 解决了脏读的情况,却有了不可重复读的现象
大多数数据库的默认级别就是Read committed,比如Sql Server , Oracle。如何解决不可重复读这一问题,请看下一个隔离级别。
3.
Repeatable Read (可重复读)
当数据库事务隔离级别设置成 '可重复读 ' 的时候,可以解决不可重复读的情况,事务A去操作数据(事务开始),则别的事务不可能对该记录进行更改,
虽然reperatable Read 解决了不可重复读的情况,但是有可能出现幻读的情况
事务A查询数据,而这时候事务B进来更改了数据,并提交了事务,事务A打印出来的数据可能是加上事务B操作的数据,就出现了幻读
my sql 默认是Repeatable Read
4.
Serializable 序列化
Serializable是最高的事务隔离级别,同时代价也花费最高,性能很低,一般很少使用,在该级别下,事务顺序执行,不仅可以避免脏读、不可重复读,还避免了幻像读。