MySQL 数据库的隔离级别
数据库有4种隔离级别,它控制着并发和数据一致性之间的关系,并发性越高,则数据的一致性越差,下面以实例来说明
脏读
“脏读”的意思是在一个会话 Session1 中开启一个事务,在事务中插入一条数据,但是没有提交事物,此时在另一个会话 Session2 中开启一个事务,会查询到这条数据,这种现象称之为“脏读”,下图为实际操作演示:
不可重复读
“不可重复读”的意思是在一个会话 Session1 中开启一个事务,查询数据库未查到数据,此时在另一个会话 Session2 中开启一个事务,插入一条数据并提交,此时回到 Session1 查询数据库会查到这条数据,这种现象称之为“不可重复读”,下图为实际操作演示:
幻读
“幻读”的意思是在一个会话 Session1 中开启一个事务,查询数据库未查到数据,此时在另一个会话 Session2 中开启一个事务,插入一条数据并提交,此时回到 Session1 查询数据库依然查不到数据,现在在 Session1 插入一条同样的数据,会提示错误,这种现象称之为“幻读”,下图为实际操作演示:
一致性读
“一致性读”的意思是在一个会话 Session1 中开启一个事务,此时在另一个会话 Session2 中开启一个事务会提示阻塞,不允许操作,知道Session1处理完当前的事务,这种隔离级别不允许并发,只是单纯的串行操作,这种现象称之为“一致性读”。
总结
数据库的隔离级别越低,数据库的并发性能越高,但无法保证数据的一致性,相反的,隔离级别越高,数据的一致性越高,数据库的并发性能越差,最高的隔离级别不支持并发,只要开启一个事务,就会阻塞其他的事务,从而保证数据的一致性。
Last updated