MYSQL事件隔离级别以及复读,幻读,脏读的理解
一.mysql事件隔离级别
1未提交读(READUNCOMMITTED)
另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读)( 隔离级别最低,并发性能高 )
2..提交读(READCOMMITTED)
本事务读取到的是最新的数据(其他事务提交后的)。问题是,在同一个事务里,前后两次相同的SELECT会读到不同的结果(不重复读)。会出现不可重复读、幻读问题(锁定正在读取的行)
3.可重复读(REPEATABLEREAD)
在同一个事务里,SELECT的结果是事务开始时时间点的状态,因此,同样的SELECT操作读到的结果会是一致的。但是,会有幻读现象(稍后解释)。会出幻读(锁定所读取的所有行)
4.串行化(SERIALIZABLE)
读操作会隐式获取共享锁,可以保证不同事务间的互斥(锁表)
二.脏读、不可重复读、幻读、复读
1.脏读
当前事务读到的数据是别的事务想要修改成为的但是没有修改成功的数据
2.不可重复读
当前事务先进行了一次数据读取,然后再次读取到的数据是别的事务修改成功的数据,导致两次读取到的数据不匹配,也就照应了不可重复读的语义
3.幻读
当前事务读第一次取到的数据比后来读取到数据条目少或者增加,针对数据的删与增
4.复读
当前事务先进行了一次数据读取,然后再次读取到的数据是别的事务修改之前的数据,两次数据相同