1.(read uncommitted)
读到事务未提交数据 : 假设用户A与用户B,用户 A 开启一个事务, account + 200, A 事务还未 commit 用户B 就可以看到 account+ 200 的结果, 这样 在用户B读数据的时候,有可能读到未提交的数据,这就叫做脏读。
2. (read committed) 大多数数据库的默认隔离级别
只能读到事务提交后的数据: 假设 用户 A 开启一个事务, account+ 200, 此时用户A 的数据还未提交,B读到的数据依旧不会改变,只有等 A 的事务 commit 后,B才可以读到 account+200 , 这样就会出现B在一个事务中可能会读到两次不同的数据(第一次读的时候A事务还未提交,第二次读的时候A事务已经提交),这种读到两次不同的数据也叫不可重复读
3. (repeatable read) mysql的默认隔离级别
同一事务内读到的数据一致: 事务B开启一个事务,先读一次数据,然后A在其中插入一条新数据,此时B再读一次,发现数据并没有发生变化,但是当我们插入和A刚插入的数据相同的一条数据时,就会报数据已存在, (如果我们是用户B就会感到一脸懵逼,明明看到的数据不存在,但是插入的数据已存在,我们称这种就为幻象读)
4. ( serializable) :
串行化:A开启一个事务,读数据,此时还未提交,B此时要往数据库里写数据,发现需要等待,当A事务提交了,B才可以成功写入。
网友评论