MySQL 数据库的隔离级别

数据库有4种隔离级别,它控制着并发和数据一致性之间的关系,并发性越高,则数据的一致性越差,下面以实例来说明

脏读

“脏读”的意思是在一个会话 Session1 中开启一个事务,在事务中插入一条数据,但是没有提交事物,此时在另一个会话 Session2 中开启一个事务,会查询到这条数据,这种现象称之为“脏读”,下图为实际操作演示:

不可重复读

“不可重复读”的意思是在一个会话 Session1 中开启一个事务,查询数据库未查到数据,此时在另一个会话 Session2 中开启一个事务,插入一条数据并提交,此时回到 Session1 查询数据库会查到这条数据,这种现象称之为“不可重复读”,下图为实际操作演示:

幻读

“幻读”的意思是在一个会话 Session1 中开启一个事务,查询数据库未查到数据,此时在另一个会话 Session2 中开启一个事务,插入一条数据并提交,此时回到 Session1 查询数据库依然查不到数据,现在在 Session1 插入一条同样的数据,会提示错误,这种现象称之为“幻读”,下图为实际操作演示:

一致性读

“一致性读”的意思是在一个会话 Session1 中开启一个事务,此时在另一个会话 Session2 中开启一个事务会提示阻塞,不允许操作,知道Session1处理完当前的事务,这种隔离级别不允许并发,只是单纯的串行操作,这种现象称之为“一致性读”。

总结

数据库的隔离级别越低,数据库的并发性能越高,但无法保证数据的一致性,相反的,隔离级别越高,数据的一致性越高,数据库的并发性能越差,最高的隔离级别不支持并发,只要开启一个事务,就会阻塞其他的事务,从而保证数据的一致性。

Last updated