认识一下MySQL中的事务隔离级别

148 阅读2分钟

这是我参与8月更文挑战的第30天,活动详情查看: 8月更文挑战

数据库的事务隔离级别是面试中常问到的,今天我们就来认识一下MySQL中的事务隔离级别。

四大事务特性

事务都会遵循四个条件,那就是ACID原则。

Atomicity(原子性):一个事务中的所有操作,要么全部完成,要么全部不完成,每个操作作为最小的执行单位。

Consistency(一致性) :一个事务在执行前后,都处于一致性状态。

Isolation(隔离性) :数据库提供了给多个并发事务同时对其数据进行读写和修改的功能,这时候隔离性就可以防止多个事务并发执行时的由于交叉执行的情况而导致数据的不一致。

Durability(持久性):事务执行完成后,对数据的修改就是永久的,任何情况下也不会回滚。

几个关键词要提前说一下

幻读:当一个事务对数据进行批量修改更新时,同时另外一个事务在相应数据中新增了一条数据,导致第一个事务并没有对符合要求的数据进行全部的批量更新,导致这种幻象的发生,被称为幻读。

脏读:事务之间读取数据,其中一个事务执行了回滚操作,导致另外一个事务读取的数据称为脏数据,被称为脏读。

不可重复读:不可重复读的特点就是在多次读取数据情况下发生的,在一个事务多次读取数据情况下,另外一个事务修改或者删除了相关数据信息,导致多次读取数据,查询出了不同版本的数据情况。这种现象被称为不可重复读。

四大事务隔离级别

READ_UNCOMMITTED 读未提交

事务中最低的隔离级别,允许另外一个事务可以看到这个事务未提交的数据。会出现脏读、不可重复读、幻读多种情况。

READ_COMMITTED 读提交

保证一个事务修改的数据提交后才能被另外一个事务读取,即另外一个事务不能读取该事务未提交的数据。可以解决脏读的问题,但是还有出现不可重复读、幻读的情况。

REPEATABLE_READ 可重复读

保证一个事务相同条件下前后两次获取的数据是一致的。可以解决脏读、不可重复读问题,但是还会有幻读的问题。

SERIALIZABLE 串行化

事务串行执行,解决了脏读、不可重复读、幻读。但效率很差,实际中一般都不会去用这个隔离级别。

MySQL的事务隔离级别由低到高为:

  1. READ UNCOMITTED读未提交

  2. READ COMMITTED读提交

  3. REPEATABLE READ可重复读

  4. SERIALIZABLE串行化