事务

  • 事务的并发问题

    • 脏读

    • 不可重复读

    • 幻读

隔离级别

查看当前隔离级别

SELECT @@tx_isolation;

设置隔离级别

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

mysql默认是自动提交事务。所以要想使用事务则得关闭自动提交

SET autocommit=1;

READ UNCOMMITTED隔离级别下

  1. 事务还没有提交,就被其他session进程读取了对应的数据

  2. 当事务进行回滚时,数据有变回原来的样子,就是所谓的幻读

READ COMMITTED隔离级别下

只有事务在commit之后,读取的数据才是正确的,避免了脏读的存在

因此在另外一个session读取数据的过程中就会导致幻读的存在,在commit之前是一种状态,提交之后又是另外一种状态

REPEATABLE READ隔离级别

在该隔离级别在时,第一个session使用SQL语句修改了数据,第二个session去查询的时候,只有第二个session提交之后才能够看到修改之后的数据,解决了脏读和不可重复读的问题。

不可避免幻读问题

当一个session在插入数据提交后,另外一个session还没有commit时,会读到第一个session提交的数据。

SERIALIZABLE隔离级别

串行化,给session加上锁,避免了事务中的几个问题

SAVEPOINT a设置保存点

使用ROLLBACK TO a回滚到对应的保存点

Last updated