常用操作:
1.查看当前会话隔离级别
select @@tx_isolation;
2.查看系统当前隔离级别
select @@global.tx_isolation;
3.设置当前会话隔离级别
set session transaction isolation level repeatable read;
4.设置系统当前隔离级别
set global transaction isolation level repeatable read;
5.命令行,开始事务时
set autocommit=off 或者 start transaction
mysql的事务隔离级别有以下四种:
1.读未提交(read uncommitted),例如有两个事务:事务A与事务B,事务A里面更新了一条记录并且未提交,事务B可以读取到事务A未提交的更改,一般不用,如果事务B使用了事务A未提交的更改,并在此基础上做了运算,并更改了数据库,事务A如果事务回滚,将会导致数据的不一致(存在脏读问题)。
2.读提交(read committed),这是很多数据库默认的事务隔离级别,但是不是mysql事务的默认隔离级别,这种隔离级别可以解决脏读的问题,但是无法解决可重复读以及幻读问题,两个事务:事务A与事务B,事务A更新了某条记录并提交,事务B在事务A操作该数据之前读取一次数据,然后在事务A更新该数据并提交后再读一次,读到的结果不一样(也称不可重复读)。
3.可重复读(repeatable read),两个事务:事务A与事务B,事务A更新了某条记录并提交,事务B在事务A操作该数据之前读取一次数据,然后在事务A更新该数据并提交后再读一次,读到的结果一样。针对这种隔离级别,网上很多资料都说存在幻读的情况,其他数据库可能如此,但是mysql的innodb存储引擎却通过多版本并发控制解决了幻读这个问题,笔者在实际测试过程中发现如果事务A插入或者删除数据,事务B仅仅执行select操作,不执行insert、update等更改数据的操作,那么就不存在幻读的问题,否则就会存在幻读问题,但是笔者认为这也不是典型的幻读操作了吧,毕竟执行了write操作
4.串行读(serializable),最高的事务隔离级别,在实际生产环境很少使用,因为这种隔离级别应对高并发方面性能远远不足!!
通用数据库的事务隔离级别如下图所示,请注意mysql在可重复读下幻读可能性的不同之处(不存在write操作的话就可以避免幻读)

东码网络