事务
事务的并发问题
脏读
不可重复读
幻读
隔离级别
查看当前隔离级别
SELECT @@tx_isolation;
设置隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
mysql默认是自动提交事务。所以要想使用事务则得关闭自动提交
READ UNCOMMITTED
隔离级别下
READ UNCOMMITTED
隔离级别下事务还没有提交,就被其他session进程读取了对应的数据
当事务进行回滚时,数据有变回原来的样子,就是所谓的幻读
READ COMMITTED
隔离级别下
READ COMMITTED
隔离级别下只有事务在commit
之后,读取的数据才是正确的,避免了脏读的存在
因此在另外一个session读取数据的过程中就会导致幻读的存在,在commit
之前是一种状态,提交之后又是另外一种状态
REPEATABLE READ
隔离级别
REPEATABLE READ
隔离级别在该隔离级别在时,第一个session使用SQL语句修改了数据,第二个session去查询的时候,只有第二个session提交之后才能够看到修改之后的数据,解决了脏读和不可重复读的问题。
不可避免幻读
问题
当一个session在插入数据提交后,另外一个session还没有commit时,会读到第一个session提交的数据。
SERIALIZABLE
隔离级别
SERIALIZABLE
隔离级别串行化,给session加上锁,避免了事务中的几个问题
SAVEPOINT a
设置保存点
SAVEPOINT a
设置保存点使用ROLLBACK TO a
回滚到对应的保存点
Last updated