1.READ UNCOMMITTED
读未提交事务数据 会造成脏读 隔离级别低
2.READ COMMITTED
读已提交的数据 避免脏读 不能避免幻读和重复读的情况
3.REPEATABLE READ
可重复读 mysql默认事务隔离级别 避免脏读 避免幻读和重复读的情况
4.SERIALIZABLE
可串行化 最高隔离级别 她他会强制对事务进行排序,使之不会发生冲突。实际再每个读的数据行加锁,这个界别可能导致大量的超时现象和锁竞争,实际很少使用。
脏读 :
脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。
不可重复读 :
是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务再修改数据。那么第一个事务两次读到的的数据可能是不一样的,因此称为是不可重复读。
幻读:
当某事物正在执行插入或删除操作同时,第二个事物也在操作此表的数据,就会显示有一行还未存在的数据,就像发生了幻觉一样。
设置隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
查询隔离级别
select @@tx_isolation;
1.不可重复读
事务内两次事务查询内容不一致
2.重复读 REPEATABLE READ
事务内两次查询内容保持一致
3.幻读
事务内两次查询中数据条数不一致
4.可串行化
在每个读的数据行上加上行锁,使之不可能相互冲突,因此会导致大量的超时现象
开启两个窗口测试
1.设置隔离级别
第一个窗口
第二个窗口