数据库四种隔离级别
https://www.cnblogs.com/catmelo/p/8878961.html 起初隔离级别为read uncommitted 读未提交;a,b两个会话,分别开启两个事务,然后a向b转了500元钱,但a未提交该事务, 此时b查看,发现多了500.然后a回滚事务,b再查看账户,发现根本就没有多500.这便是 脏读 。脏读便是可以读取到另一个事务尚未提交的数据。 如果我们此时将隔离级别提升为read committed 读已提交,便可避免脏读。同样b两个会话,分别开启两个事务,然后a向b转了500元钱, 但a未提交该事务,此时b查看,依旧是原钱数. 但此时,如果a 提交事务,b再去查看,发现此时多了500,对b而言,在一个事务中,两次查询的结果不一致,这便是 不可重复读 。 如果我们此时将隔离级别提升为repeatable read 可重复读 ,可以避免脏读和不可重复读的发生。同样a 提交事务,b再去查看,发现 依旧是原钱数,b只能结束当前事务,在开启一个新事务,才能查询到数据的变化,这al便避免了不可重复读。 如果我们设置了 seriizable 串行化,就相当于锁表,某一时间内只允许一个事务访问该表。 在可重复读中,该sql第一次读取到数据后,就将这些数据加锁(悲观锁),其它事务无法修改这些数据,就可以实现可重复读了。但 这种方法却无法锁住insert的 数据