Onee's Den
GithubTwitter
  • 简介
  • 项目
    • onee-framework
    • crypto-zombies
  • 博客
    • 以太坊区块数据详解
    • 区块链技术科普
    • Apollo 配置中心实战场景
      • 动态变更日志输出级别
    • JS 树形插件 jsTree 使用小记
    • MySQL 数据库的隔离级别
    • 优化 Lucene 搜索速度的一点建议
    • LeetCode 刷题之旅
      • 344. Reverse String
      • 412. Fizz Buzz
      • 461. Hamming Distance
      • 463. Island Perimeter
    • RabbitMQ 初次尝试
    • 记一次搭建 OpenVPN 过程
Powered by GitBook
On this page
  • 脏读
  • 不可重复读
  • 幻读
  • 一致性读
  • 总结

Was this helpful?

  1. 博客

MySQL 数据库的隔离级别

PreviousJS 树形插件 jsTree 使用小记Next优化 Lucene 搜索速度的一点建议

Last updated 3 years ago

Was this helpful?

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

隔离级别
脏读
不可重复读
幻读

Read Uncommited

Y

Y

Y

Read Commited(default)

N

Y

Y

Repeatable

N

N

Y

Serializable

N

N

N

脏读

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

不可重复读

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

幻读

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

一致性读

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

总结

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