事务隔离级别以及对应的问题如上所示。
读未提交:在修改数据时在没有提交时就修改了数据库,如果修改回滚则又修改为原值,这样的话在修改与回滚之间读取的数据就是不准确的,会产生脏读现象。
脏读现象是读取到未修改的数据,即是数据逻辑上不存在的数据(因为回滚未提交),而下面产生的问题均来源操作了修改删除或添加的数据(已提交),操作的是存在的数据,所以相对于其他其他问题,避免脏读格外重要。
读已提交:在提交之前不会修改数据库,解决脏读问题,这是Oracle数据库默认使用的隔离级别,但是在一个事务的两次查询中可能会在两次查询中间修改或者删除数据,导致两次读取不一致,产生不可重复读的问题。
可重复读:MySql提供了一种乐观锁的实现:MVCC(多版本并发控制),来解决读-写并发不加锁,通过MVCC + Next-Key Lock(临键锁)解决了部分幻读,实现了事务的隔离级别Repeatable Read(可重复读)。至于为什么没有完全解决;请参考[https://blog.csdn.net/m0_71777195/article/details/126968432](美团三面:一直追问我, MySQL 幻读被彻底解决了吗?)
幻读即是读取到上一次未读取到的数据,即是新添加的数据,在两次读取中间插入一条新的数据就会产生幻读。
串行化:同一时间只能存在同一个操作,解决所有并行问题