1. 事务隔离级别
(1) read uncommitted (读未提交) 导致: 脏读, 不可重复读, 幻读
(2) read committed (读已提交) 导致: 不可重复读, 幻读
(3) repeatable read (重复读) 导致: 幻读(MVCC, next-key-lock解决幻读)
(4) serialiable (串行化)
1.1 脏读:
(1) 当前事务读取到了并行的其他事务修改的数据, 这些数据还没有提交.
(2) 也就是在并行事务的场景下, 不同事务之间对于数据的修改相互可见.
(3) 这样读取到的数据可能就是个脏数据, 因为那个数据可能还没提交或者在回滚, 所以读到的数据不是最终确认的数据.
1.2 不可重复读:
(1) 在不同事务之间, 并行的事务进行读取数据, 这一行的数据读取到的值有可能在其他并行事务中被修改.
(2) 修改之后的值有可能已经把这个值改变了. 改变之后, 事务进行的提交或者回滚, 再在当前事务里对该数据进行读取, 可能读取到的值会发生变化.
(3) 这样前后两次读取到的值就是不相同了, 这就是不可重复读.
1.3 幻读:
(1) 在同一个事务中前后两次读取到的数据条数不相同. 其他事务可能进行了一个插入操作.
(2) 进行插入的数据, 有可能会影响到当前事务的业务逻辑. 读取到的数据行数不一样.
(3) 读取到的数据像是幻影, 即幻读.
MySQL事务隔离级别
读未提交
读已提交
可重复读
串行化