关于事务,常看到的概念就是ACID,从单机发展到分布式后,又出现了CAP原理和BASE思想。这里将我最近学习的单机事务做个总结,方便温故知新,后面所有的内容都是基于MySQL/InnoDB的。
隔离级别 | 脏读 | 不可重复读 | 幻象读 | 第一类更新丢失 | 第二类更新丢失 |
---|---|---|---|---|---|
READ UNCOMMITED | 会 | 会 | 会 | 不会 | 会 |
READ COMMITED | 不会 | 会 | 会 | 不会 | 会 |
REPEATABLE READ | 不会 | 不会 | 会 | 不会 | 不会 |
SERIALIZABLE | 不会 | 不会 | 不会 | 不会 | 不会 |
ANSI/ISO SQL 92标准定义上面4种隔离级别,以及每种隔离级别要达到什么标准。注意,这里是SQL 92的标准,实际数据库的实现和表格中列的是有出入的。例如,对于REAPEATABLE READ隔离级别,Wikipedia上是这么描述的:
Repeatable reads[edit]
In this isolation level, a lock-based concurrency control DBMS implementation keeps read and write locks (acquired on selected data) until the end of the transaction. However, range-locks are not managed, so phantom reads can occur.
但是对于MySQL/InnoDB, 在 REPEATABLE READ隔离级别下,是不会出现幻象读的,它是通过一种GAP间隙锁来实现的,后面再详细总结。