爱豆吧!

idouba@beta.

【译】数据库事务隔离级别

看到wikipedia中文关于数据库相关的几个经典条目有点老旧,尤其和英文条目相比。确定开始翻译其中几篇,先从事务隔离等级开始。格式采用维基Sandbox发布后的格式。翻译完后自己校对过几遍,质量还可以。:-) 已经在中文维基发布。 翻译的中文条目地址:事务隔离等级; 对应的英文条目地址:Isolation (database systems)

欢迎大家指正,可以直接在维基上对应条目更新的!。

**事务隔离(isolation)**定义了数据库系统中一个操作产生的影响什么时候以哪种方式可以对其他并发操作可见。隔离是事务ACID (原子性、一致性性、隔离性、持久性)四大属性中的一个重要属性。

1 并发控制(Concurrency control) 2 隔离级别(Isolation levels) 2.1 可序列化(Serializable) 2.2 可重复读(Repeatable reads) 2.3 授权读(Read committed) 2.4 未授权读(Read uncommitted) 3 默认隔离级别 4 读现象(Read phenomena) 4.1 脏读(Dirty reads (Uncommitted Dependency)) 4.2 不可重复读(non-repeatable read) 4.3 幻影读(phantom read) 5 隔离级别、读现象和锁(Isolation Levels, Read Phenomena and Locks) 5.1 隔离级别vs读现象(Isolation Levels vs Read Phenomena) 5.2 隔离级别vs 锁持续时间(Isolation Levels vs Lock Duration) 6 参照 7 相关条目 8 外部链接

并发控制(Concurrency control)

并发控制描述了数据库处理隔离以保证数据正确性的机制。为了保证并行事务执行的准确执行数据库和存储引擎在设计的时候着重强调了这一点。典型的事务相关机制限制数据的访问顺序(执行调度)以满足可序列化可恢复性。限制数据访问意味着降低了执行的性能,并发控制机制就是要保证在满足这些限制的前提下提供尽可能高的性能。经常在不损害正确性的情况下,为了达到更好的性能,可序列化的的要求会减低一些,但是为了避免数据一致性的破坏,可恢复性必须保证。

两阶段锁是关系数据库中最常见的提供了可序列化可恢复性的并发控制机制,为了访问一个数据库对象,事务首先要获得这个对象的 。对于不同的访问类型(如对对象的读写操作)和锁的类型,如果另外一个事务正持有这个对象的锁,获得锁的过程会被阻塞或者延迟。

隔离级别(Isolation levels)

数据库事务的ACID四个属性中,隔离性是一个最常放松的一个。为了获取更高的隔离等级,数据库系统的 机制或者多版本并发控制机制都会影响并发应用软件也需要额外的逻辑来使其正常工作。

很多DBMS定义了不同的“事务隔离等级”来控制锁的程度。在很多数据库系统中,多数的数据库事务都避免高等级的隔离等级(如可序列化)从而减少对系统的锁定开销。程序员需要小心的分析数据库访问部分的代码来保证隔离级别的降低不会造成难以发现的代码bug。相反的,更高的隔离级别会增加死锁发生的几率,同样需要编程过程中去避免。

ANSI/ISO SQL定义的标准隔离级别如下。

Read more →