这是之前的一个帖子:oracle - mysql - 数据库事务隔离级别介绍
写的不全面, 按现在的理解,重新写一个;
一、名词解释
脏读:在一个查询事务过程中,读到了其它事务没有提交的数据;
不可重复读:一个事务查询过程中,多次查询得到了不一致的结果,原因是:有别的更新事务提交了;
幻读:一个事务查询过程中,多次查询得到了不一致的结果,原因是:有别的删除事务/插入事务提交了;
二、数据库隔离级别
| name | 名称 | 脏读 | 不可重复读 | 幻读 | 加锁读 |
|:—–|:—–|:—–|:—–|:—–|:—–| :—–|
| Read uncommitted | 读未提交 | Yes | Yes | Yes | No |
| Read committed | 读已提交 | No | Yes | Yes | No |
| Repeatable read | 可重复读 | No | No | Yes | No |
| Serializable | 序列化 | No | No | No | Yes |
默认的隔离级别为:RR,原因:5.1之后版本,如果Binlogog开启语句级别,必须为RR,RC可能会导致Binlog数据错误(详情);
三、控制方式
读未提交:每次都是读数据最新的版本(包括事务未提交的数据);
读已提交:MVCC控制;
可重复读:MVCC控制;
序列化:在读取的每一行上加锁,只能按顺序进行读写;