事务
事务的并发问题
脏读
不可重复读
幻读
隔离级别
查看当前隔离级别
SELECT @@tx_isolation;
设置隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
mysql默认是自动提交事务。所以要想使用事务则得关闭自动提交
SET autocommit=1;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
Was this helpful?