要了解隔离级别,首先要了解一下事务,隔离级别只有在事务操作下才起作用。
事务事务是由一组SQL语句组成的逻辑处理单元,这些操作要么全部执行成功,要么全部失败。
事务特性原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。
一致性(Consistency):在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性。
隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。
持久性(Durability):事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。
并发事务处理带来的问题更新丢失(脏写):多个事务对同一条记录进行修改时,最后的操作覆盖了之前的事务操作,结果前面的操作更新丢失了。这种现象称之为「更新丢失」。
脏读:一个事务正在对一条记录进行修改,并未提交,在未加锁时另一个事务在读取到了该未提交的记录并对该记录又进行了操作,就造成了数据前后不一致的情况。这种现象称为「脏读」。你一个朋友在给你转账一万元,转账事务还没结束,你去查看账户余额发现已经多了一万,这个时候读取到账户余额多出一万的情况就是脏读。如果你把这笔钱花了,而这个事务也回滚了,就会出现数据不一致的情况。
幻读:一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象称为「幻读」。查看完账户余额,你又去这个月查看账单,此时你在查看账单这个事务中。第一次查看的时候看到这个月只有一笔收入,莫名其妙你又查看了一下这个月账单发现多出一条一百万的收入,多出的一条一百万的记录就是幻读。
不可重读:一个事务在读取某些数据后的某个时间,再次读取以前读过的数据,却发现其读出的数据已经发生了改变或某些记录已经被删除了。这种现象称为「不可重复读」。你去查看这个一百万账单的详情,此时你在查看账单详情的事务中,也不知道哪个老几给你转的。此时那个老几发现转账错误,就给银行打电话取消这笔转账。与此同时你想去