数据库隔离级别是只多个并行的事务之间的锁策略
隔离级别
等级 | 名称 | 说明 | 产生的问题 |
---|---|---|---|
0 | Read Uncommitted | 读未提交,即并行的事务中没有提交的数据其它事务也可以查询的到 | 脏读(读取到别的事务回滚前的脏数据)、不可重复读(一个事务多次读取的数据不一样)、幻读(一个事务多次读取的数据条数不一样) |
1 | READ COMMITTED | 读提交,不会读到其它事务没提交的数据 | 不可重复读(一个事务多次读取的数据不一样)、幻读(一个事务多次读取的数据条数不一样) |
2 | REPEATABLE READ | 重复读,不能修改其它事务已读取但为提交的数据 | 幻读(一个事务多次读取的数据条数不一样)、性能损失 |
3 | Serializable | 串行化,事务间串行执行 | 不存在并行的事务,所以没问题 |
问题分析
- 脏读:读到别的事务还没回滚前的脏数据,只有读未提交下允许读其他事务没提交的数据,所以只有读未提交才会有
- 不可重复读:并行的事务将数据更改了,导致另一个事物两次读一条数据的结果都不一样。即不能保证两次读取数据相同,即不可重复读。重复读禁止事务修改被其它事务读的数据,所以避免此问题。(针对update、delete)
- 幻读:和不可重复读类似,但是被改变的是匹配查询语句的数据条数。第一次读匹配一条,被另一个并行事务修改后又读到了两条。此为幻读。幻读并不是改变已经读到的数据,而是增加条目,所以只有串行化可以解决(针对insert)
网友评论