事务隔离级别用于解决事务的问题,事务常见的问题有:脏读,不可重复读,幻读
对此解释一下脏读、不可重复读、幻读
脏读:一个事务查询到另外一个事务未提交的数据
不可以重复读:两次查询到的数据不一致
幻读:一个事务查询数据的时候不存在,另外一个事务插入的时候,发现已经有数据了
那么现在来了解隔离级别:
但是需要注意的是SERIALIZABLE 虽然可以完全避免脏读、不可重复读和幻读,但会显著影响并发性能,会导致事务之间几乎是串行执行,极大降低了系统吞吐量。话又说回来它是最安全的。READ_UNCOMMITTED性能最高,但是不安全。
为什么READ_UNCOMMITTED性能最高?
- 不加锁或极少加锁
- 在这个隔离级别下,事务对读取的数据不会加读锁,写操作也不会阻塞读操作。
- 这样,多个事务可以同时读写同一份数据,极大提升了并发性能。
- 无需等待
- 由于没有锁定,读操作不会因为其他事务的写操作而等待,减少了阻塞和锁竞争。
为什么READ_UNCOMMITTED不安全?
- 可能发生脏读(Dirty Read)
- 事务A可以读取到事务B尚未提交的数据。如果B回滚,A读取到的数据就是无效的。
- 这会导致数据不一致,产生严重的业务逻辑错误。
- 也会发生不可重复读和幻读
- 由于没有锁定,其他事务可以随时修改或插入数据,导致同一事务内多次读取结果不一致
注意:数据库不同;默认的隔离级别也不同