《一》隔离级别
一、脏读、幻读、不可重复读
1、脏读:一个事务读到另一个事务未提交的数据
2、不可重复读
3、幻读
二、隔离级别
1、Read uncommitted(读未提交):可能出现脏读、不可重复读和幻读。
2、Read committed(读提交):可以避免脏读,但可能出现不可重复读和幻读。
- 大多数数据库默认级别就是Read committed,比如Sql Server数据库和Oracle数据库。注意:该隔离级别在写数据时只会锁住相应的行。
3、Repeatable read(可重复读):可以避免脏读和不可重复读,但可能出现幻读。
-
事务隔离级别为可重复读时:
查询时默认加的时next-key锁,增删改时加的锁为???????
如果检索条件有索引主键索引或唯一索引时next-key变为行锁,普通索引还是next-key锁
如果检索条件没有索引,变为表锁,更新数据时会锁住整张表表锁。
通过间隙锁:一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录的,这样可以防止幻读。
4、Serializable(序列化):可以避免脏读、不可重复读和幻读,但是并发性极低,一般很少使用。
- 该隔离级别在读写数据时会锁住整张表。