作者:禅与计算机程序设计艺术
1.背景介绍
什么是并发控制?
并发控制(Concurrency Control)是为了解决多用户同时访问数据库导致数据不一致或脏读、幻读等问题所设计的一种机制。简单地说,并发控制就是一个事务的执行需要多个阶段,每个阶段都要求访问临时资源,如果这些资源被其他事务占用,则需要管理好对资源的访问,防止冲突的发生。例如,当两个事务同时对一条记录进行修改的时候,产生了冲突。这时候就要通过并发控制机制来避免这种问题。
什么是事务隔离级别?
事务隔离级别(Transaction Isolation Level)定义了一个事务对数据的独占和加锁方式。在不同的隔离级别下,一个事务只能看到自己的那个版本的数据,也不能查看其它事务未提交的修改。它用来确保并发情况下多个事务不会相互干扰,从而使数据库的一致性得到保障。目前有四种基本的隔离级别:
- READ UNCOMMITTED (读未提交):允许脏读、不可重复读、幻读。这是最低的隔离级别,任何情况都可能出现这种问题。
- READ COMMITTED (读已提交):确保一个事务从开始到提交之前,其他事务都无法读取该事务已处理的结果。
- REPEATABLE READ (可重复读):保证同一个事务的多个实例在并发环境中返回同样的查询结果。但是,这可能导致幻象行。
- SERIALIZABLE (串行化):最高的隔离级别,完全禁止并发访问。 除了这四种隔离级别之外,还有一些特殊级(如多版本并发控制)。本文只讨论基本的隔离级别。