数据库事务的隔离级别有4个,由低到高依次为:
Read uncommitted | 未授权读取 读未提交 | 读可允许其他两个事务不能同时进行写操作 | 事务B读取事务A未提交的数据 | 避免 更新丢失 会出现 脏读 |
Read committed | 授权读取 读提交 | 读可允许其他 未提交的事务禁止其他事务访问进行 | 事务A读取数据 事务B更改数据 事务A读取B更改后的数据,前后结果不一致 | 避免 脏读 会出现 不可重复读(重复读取结果不同) |
Repeatable read | 可重复读取 | 读不允许写事务进行 写禁止其他事务进行 | 事务A读取R1和修改R2 事务B则不能修改R1和读取R2,B不会影响A 如果A包含一个统计某个范围内记录的操作,而B恰好在范围内插入一条记录,造成A幻读 | 可重复读取会出现幻读 |
Serializable | 序列化 | 事务只能一个接着一个执行,不能并发执行 | 最高的事务隔离级别,性能很低,一般很少用 | 避免 脏读,避免 不可重复读,避免 幻读 |