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;