事务的隔离性—脏读/幻读/不可重复读

MySQL中有四个隔离等级

 1 :read uncommitted   读取没提交的数据

       事务a中执行的sql语句执行了,却没有提交数据。事务b也可以读取到这些未提交的数据,这样称为脏读

 2:read committed  读取提交的数据

      事务b能读取到事务a提交的数据,事务b还没结束,事务b的后续SQL操作会被事务a修改的数据所影响,这样成为不可重复读

 3:repeatable read 可以重复读  MySQL中默认是设置为repeatable table的。

     事务a已经查询过这些数据,事务b再修改这些数据并提交到数据库,这些修改的数据事务a是查不到的。

     也就是说一个事务只能查询一次数据,因为后面即使再次查询,查询的数据也不会随着数据库的改变而改变,但数据库的数据改变是肯定存在的,事务却查不到,这样会导致幻读

 4:serializable 串行化   这个安全等级是最高的,也是最消耗资源的

      一个cmd事务没有结束(结束就是提交数据) 另一个cmd的事务不能进行写入数据操作,这样成为串行化

修改MySQL中的隔离等级,修改后要重启才会起作用

set global transaction isolation level  等级

 查看MySQL中的隔离等级

MySQL版本为8.x的

select @@global.transaction_isolation;

select @@transaction_isolation;

MySQL版本为5.x的

select @@ global.tx_isolation;

select @@tx_isolation;

原文地址:https://www.cnblogs.com/zhangyang4674/p/11603578.html