# 事务隔离级别

# 分类

# 读未提交:read uncommitted

概念:
    事务A可以读取到事务B未提交的数据

存在脏读现象(Dirty Rread):称读到脏数据

# 读已提交:readcommitted

概念:
    事务A只能读取到事务B提交之后的数据
这种隔离级别解决了脏读现象

存在‘不可重复读取数据’问题:在事务开启后,每次读取到的数据可能不一致。比如A开始事务循环读取数据的过程中,B事务不断修改数据并提交,导致A事务在后续的数据读取过程中,数据产生不一致的现象

这种隔离级别是比较真实的数据,每一次读到的数据绝对真实
注意:Oracle数据库默认的隔离级别是: read committed

# 可重复读:repeatable read

概念:
    事务A开启后,不管多久,每一次在事务A中读取到的数据都是一致的。即使事务B将数据修改,并且提交了。事务A读取到的数据还是没有发生改变,这就是可重复读
解决了不可重复读的现象

存在幻读现象:每一次读取到的数据都是幻象,不够真实

Mysql默认隔离级别

# 序列化 / 串行化:serializable

概念:

隔离级别最高,效率最低。解决了所有问题
不能并发

# 测试隔离级别

查看变量:
show variables;
通过like 通配符查询
show variables like '%isolation%';

查看隔离级别:
select @@transaction_isolation; 

设置全局事务等级
set global transaction isolation level read committed;