必要知识点
mysql的事务隔离级别:
- Read Uncommitted (读未提交)
- 该隔离级别的事务会读到其它未提交事务的数据,此现象也称之为 脏读 .
- Read Committed (读提交)
- Oracle 和 SQL Server 的默认隔离级别.
- REPEATABLE READ (可重复读)
- MySQL 默认的隔离级别.
- 在begin开启事务后,select始终读到是事务开始时间点的状态.
- 会产生幻读.
- SERIALIZABLE (序列化)
- 串行顺序执行.
- InnoDB 引擎会给读操作隐式加一把读共享锁,从而避免了脏读、不可重读复读和幻读问题.
什么是脏读?
当一个事务修改了另外一个事务未提交的数据时,既产生了脏读(Read Uncommitted)。
什么是幻读?
基于mysql的可重复读的事务隔离级别下存在的幻读现象。
因为此级别虽然不能读到其他事务已经提交的数据,但是在数据的写上会存在直接影响。
比如这个事务虽然在读取某行数据上是不存在的,但是却可以能够能够update、delete这行不存在的数据(这个不存在是相对于当前事务的,实质上是其他事务已经提交过的数据,只是无法被当前事务读取而已),这就是幻读现象。
Oracle 数据库对于幻读的定义可能有所不同。