隔离级别:
隔离级别从高到低依次为:串行化(Serializable)、可重复读(Repeatable reads)、读已提交(Read committed)、读未提交(Read uncommitted)
读未提交(Read uncommitted):
最低的隔离级别,A事务可以读取到B事务未提交的数据,会存在幻读、脏读、不可重复读的问题
读已提交(Read committed):
A事务在修改数据的过程中,如果还没提交,其他事务读取不到该数据,避免脏读发生
可重复读(Repeatable reads):
由于读已提交的隔离级别会产生不可重复读的现象,所以更高一级别的隔离级别可以解决不可重复读的问题,没办法彻底解决幻读
串行化(Serializable):
最高的隔离级别,幻读在可序列化的隔离级别中可以解决
脏读、幻读、不可重复读解释:
脏读:
读到了其他事务未提交的数据,比如A事务在操作数据,但是未提交,B事务处理的时候使用到了这条数据,因为事务A还未提交,所以事务B读到的数据就是脏数据。
幻读:
事务在做范围查询时,有其他事务对这个范围的数据做了新增或者删除操作,导致范围内查询的结果条数不一致。一般解决幻读的方案是增加范围锁,锁定检测范围为只读
不可重复读:
不可重复读,是一个事务范围内的两次查询返回了不同的数据。事务A正在查询一条数据,事务B也查询了这条数据并且对数据做了修。这时,事务A在执行一次查询来检验,得到的结果是不同的。