type
status
date
slug
summary
tags
category
icon
password
1. 事务的特性
- 原子性(Atomicity)———通过undolog(回滚日志)来保证的
一个事务中的所有操作,要么全部完成,要么全部不完成
- 一致性(Consistency)———通过持久性+原子性+隔离性来保证
是指事务操作前后,是从一个稳定状态到另一个稳定状态,数据库保持一致性的状态
- 隔离性(Isolation)———通过 MVCC(多版本并发控制)或锁机制来保证的
多个并发事务同时操作数据,多个事务间不相互影响
- 持久性(Durability)———通过 redolog(重做日志)来保证的
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失
2. 并发事务会引发的问题
- MySQL服务端是允许多个客户端连接的,这意味着 MySQL 会出现同时处理多个事务的情况。
- 那么在同时处理多个事务的时候,就可能出现脏读(dirty read)、不可重复读(non-repeatableread)、幻读(phantom read)的问题。
- 脏读(dirty read)
【事务A读取到事务B修改但未提交的数据】
- 不可重复读(non-repeatableread)
【事务A,先后两次读取的数据不一致】
- 幻读(phantom read)
【事务A,两次读取的数据的条数不一致】
3. 事务的隔离级别
前面我们提到,当多个事务并发执行时可能会遇到「脏读、不可重复读、幻读」的现象,这些现象会对事务的一致性产生不同程序的影响。
- 这三个现象的严重性排序如下:

- SQL 标准提出了四种隔离级别来规避这些现象,隔离级别越高,性能效率就越低,这四个隔离级别如下(隔离水平从高到低):

- 隔离级别
- 读未提交(read uncommitted):指一个事务还没提交时,它做的变更就能被其他事务看到;
- 读已提交(read committed):指一个事务提交之后,它做的变更才能被其他事务看到;
- 可重复读(repeatable read):指一个事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,MySQL InnoDB 引擎的默认隔离级别;MVCC版本控制实现。
- 串行化(serializable);会对记录加上读写锁,在多个事务对这条记录进行读写操作时,如果发生了读写冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行;
- 作者:ZhouZhou
- 链接:https://zzzero.site/article/256fcf41-935f-802f-a572-daefbd754740
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。