前言
MySQL本身不具备事务,具备事务功能且为常用的存储引擎为InnoDB
。本章只讲解在InnoDB
下事务对应的隔离机制。
InnoDB的事务
InnoDB
实现了数据库事务要求的ACID
特性,ACID
分别取了四个单词的首字母:
- Atomicity:原子性。要求在事务期间,要么执行成功
commit
,要么执行失败rollback
- Consistency:一致性。这里指事务在开始前和结束之后,整体的完整性约束没有被破坏。在事务期间发生的操作,只要不违背数据库的完整性约束,都认为是一致性的。这里的一致性也取决用户,具体请参考知乎高赞回答
- Isolation:隔离性。这里的隔离分了不同级别,下面会讲
- Durability:持久性。指数据应该被持久化,
InnoDB
通过Redo Log
实现
InnoDB的隔离机制
在InnoDB中支持的隔离级别有四种,分别列举:
- 未提交读(Read-Uncommitted):可以读到其它事务还未
commit
或rollback
的数据 - 已提交读(Read-Committed):可以读到事务已
commit
的数据 - 可重复读(Repeatable-Read):开启事务后,读到的数据必须是一致的
- 串行化(Serializable):事务操作过的数据必须要上写锁,在事务完成时释放