Mysql的事务隔离级别一共有4个.分别为 SERIALIZABLE(串行化) , REPEATABLE READ(可重复读) , READ COMMITTED(读已提交) , READ UNCOMMITTED(读未提交)
每种事务隔离级别对事务的影响:
- SERIALIZABLE(串行化) : 所有事务串行化执行, 只有当前一个事务提交后,下一个事务才会开始执行.
- REPEATABLE READ(可重复读) : 保证同一个事务多次读取同一数据行的数据是一致的,即 可重复读.但是它会有 幻读 的问题.
- READ COMMITTED(读已提交) : 一个事务可以看到其他事务已提交的信息, 即它是不可重复读的.
- READ UNCOMMITTED(读未提交) : 一个事务可以看到其他事务还未提交的内容, 可能出现脏读.
对幻读,不可重复读,脏读的说明
-
幻读 : 事务1修改了表中所有行的数据,此时事务2对表新增了一行记录, 则事务1再读取表的所有数据时,会发现一行记录的数据没有被修改,就像出现了幻觉一样,这种现象称为幻读.
-
不可重复读 : 事务1读取记录1后,事务2修改了记录1,则事务1再次读取时,和上一次的读取结果不一致, 即同一个事务中读取的同一行记录,可能会看到不同的数据.(可重复读,与之对应,即同一个事务中读取的同一行记录,一定会看到相同的数据)
-
脏读 : 事务1修改了记录1,事务1还未提交时,事务2读了该行的数据,然后事务1回滚了,使事务2读取到的数据变成了脏数据, 这种现象称为脏读
每种事务隔离级别可能出现上面三种问题的对应关系
隔离级别 | 幻读 | 不可重复读 | 脏读 |
---|---|---|---|
SERIALIZABLE(串行化) | 不可能 | 不可能 | 不可能 |
REPEATABLE READ(可重复读) | 可能 | 不可能 | 不可能 |
READ COMMITTED(读已提交) | 可能 | 可能 | 不可能 |
READ UNCOMMITTED(读未提交) | 可能 | 可能 | 可能 |