出处:http://www.cnblogs.com/stephen-liu74/archive/2012/06/08/2315679.html
在SQL的标准中事务隔离级别分为以下四种:
1. 读未提交(Read uncommitted)
2. 读已提交(Read committed)
3. 可重复读(Repeatable read)
4. 可串行化(Serializable)
然而PostgreSQL在9.1之前的版本中只是实现了其中两种,即读已提交和可串行化,如果在实际应用中选择了另外两种,那么PostgreSQL将会自动向更严格的隔离级别调整。在PostgreSQL v9.1的版本中提供了三种实现方式,即在原有的基础上增加了可重复读。在这篇博客中我们将只是针对2)和4)进行说明和比较,因为在9.1中,3)和4)的差别也是非常小的。
读已提交 | 可串行化 | |
PostgreSQL缺省隔离级别 | 是 | 否 |
其它事物未提交数据是否可见 | 不可见 | 不可见 |
执行效率 | 高 | 低 |
适用场景 | 简单SQL逻辑,如果SQL语句中含有嵌套查询,那么在多次SQL查询中将极有可能获得不同版本的数据。 | 复杂SQL逻辑,特别是带有嵌套的查询比较适用。 |
SELECT查询一致性时间点 | 从该SELECT查询开始执行时,在此查询执行期间,任何其它并发事物针对该查询结果集的数据操作都将不会被本次查询读到,即本次查询获取的数据版本是与查询开始执行时的数据版本相一致。 | 从该SELECT查询所在事物开始时,在此查询执行期间,任何其它并发事物针对该查询结果集的数据操作都将不会被本次查询读到,即本次查询获取的数据版本是与查询所在事物开始时的数据版本相一致。 |
同事物内的数据操作是否可见 | 比如在同一个事物内存在update和select操作,即使当前事物尚未提交,update所作的修改,在当前事物后面的select中依然可见。 | 和读已提交相同。 |
同事物内多次相同的select所见的数据是否相同 | 不同,由于该级别select的一致性时间点是该查询开始执行时,而多次查询的时间点将肯定不相同,如果在第一次查询开始到第二次查询开始之间,其它的并发事物修改并提交或当前事物仅修改了查询将要获取的数据,那么这些数据操作的结果将会在第二个查询中有所体现。 | 需要分两步来说,对于同一事物内的修改如果发生在两次查询语句之间,那么第二个查询将会看到这些修改的结果。然而对于其它并发事物的修改,将不会造成任何影响,即两次select的结果是相同的。原因显而易见,该隔离级别的select一致性时间点是与事物开始时相一致的。 |
相同行数据的修改 | 如果此时两个并发事物在修改同一行数据,先修改的事物将会给该行加行级锁,另外一个事物将进入等待状态,直到第一个事物操作该行结束。那么倘若第一个针对该行的修改操作最终被其事物回滚,第二个修改操作在结束等待后,将直接修改该数据。然而如果第一个操作是被正常提交的话,那么就需要进一步判断该操作的类型,如果是删除(delete)该行,第二个修改操作将直接被忽略。如果是update该行的记录,第二个修改操作则需要重新评估该行是否依然符合之前定义的修改条件。 | 和读已提交隔离级别的机制基本相同,只是在第一个修改操作提交后,第二个操作将不再区分之前的修改是delete还是update,而是直接并返回下面信息:Error: Can't serialize access due to concurrent update. 这是因为一个可串行化的事务在可串行化事务开始之后不能更改或者锁住被其他事务更改过的行。因此,当应用收到这样的错误信息时,它应该退出当前的事务然后从头开始重新进行整个事务。在应用程序中,也应该有必要的代码来专门处理该类错误。 |
最后需要说明的是,在绝大多数的情况下,读已提交级别均可适用,而且该级别的并发效率更高。只有在比较特殊的情况下,才手工将当前的事物隔离级别调整为可串行化或可重复读
相关推荐
1. **多版本并发控制(MVCC)**:PostgreSQL采用MVCC实现事务隔离,保证了读写操作的并发性,即使在高并发环境下也能提供一致的数据视图。 2. **全文搜索功能**:内建的Tsearch2模块支持对文本数据进行全文搜索,...
2. 高可靠性:PostgreSQL 提供了事务处理、多版本并发控制(MVCC),确保数据一致性并支持故障恢复。 3. 数据类型丰富:除了常见的数据类型,如整数、浮点数、字符串、日期时间等,PostgreSQL 还支持复杂的自定义...
1. **多版本并发控制 (MVCC):** PostgreSQL采用MVCC实现事务隔离,保证了高并发下的数据一致性。每个事务看到的数据是事务开始时的一致性视图,即使其他事务正在对数据进行修改。 2. **ACID兼容:** 遵循ACID...
PostgreSQL是一种开源的对象关系型数据库管理系统(ORDBMS),它以其强大的功能、高度的稳定性以及对ACID(原子性、一致性、隔离性、持久性)事务的支持而受到全球开发者的广泛赞誉。标题中的"postgresql-10.19-1-...
- **事务处理**:PostgreSQL支持多版本并发控制(MVCC),允许多个事务同时执行而互不影响,保证了数据的一致性。 - **复制与高可用**:支持多种复制模式,如流式复制、异步复制等,确保数据的安全性和服务的连续性...
4. **ACID事务**: 遵循原子性、一致性、隔离性和持久性的原则,保证了在并发操作中的数据一致性。 5. **高级查询语言 (SQL)**: 支持标准的 SQL:1999 及其后续版本,还提供了许多扩展功能,如窗口函数、递归查询和 ...
1. **多版本并发控制(MVCC)**:PostgreSQL使用MVCC来实现事务隔离,这使得多个并发事务可以安全地读取和修改数据,而不会相互干扰。每个事务看到的数据是事务开始时的一致性视图,不受其他事务的影响。 2. **热备...
- **ACID兼容性**:PostgreSQL严格遵循ACID(原子性、一致性、隔离性、持久性)原则,保证了事务处理的可靠性。 - **多版本并发控制**:MVCC机制允许多个用户同时读写数据库,避免了读写冲突,提高了系统性能。 -...
即使在分布式环境中,事务的ACID(原子性、一致性、隔离性和持久性)属性也能得到保证。 3. **自动负载均衡**:系统能够自动将读写操作分散到各个节点,以优化性能并避免单点瓶颈。 4. **高可用性**:通过复制和...
1. **事务一致性**:PostgreSQL保证了ACID(原子性、一致性、隔离性、持久性)特性,确保了数据库操作的正确性和可靠性。 2. **多版本并发控制**(MVCC):允许多个并发事务在同一数据上操作,而不会互相干扰,提高...
3. **事务一致性**:PostgreSQL严格遵循ACID(原子性、一致性、隔离性、持久性)原则,确保数据的一致性和完整性。 4. **高级数据类型**:除了标准的数值、字符串、日期/时间类型,PostgreSQL还支持数组、JSON、XML...
- **事务隔离级别**:理解不同的事务隔离级别(READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE)及其对并发性能的影响。 - **死锁处理**:学习如何避免死锁的发生以及如何有效解决死锁问题。 -...
- **ACID 兼容**:它遵循 ACID(原子性、一致性、隔离性和持久性)原则,确保事务的可靠执行。 - **SQL 标准支持**:PostgreSQL 支持 SQL:2003 标准,包括窗口函数、递归查询等高级特性。 - **数据类型丰富**:除了...
2. **ACID兼容**:PostgreSQL严格遵循ACID(原子性、一致性、隔离性和持久性)原则,确保了数据的一致性和完整性,适合需要高可靠性的业务场景。 3. **强大的查询语言**:其内置的SQL方言,PostgreSQL SQL,支持...
1. **多版本并发控制**:通过MVCC(Multi-Version Concurrency Control)实现事务隔离,保证高并发场景下的数据一致性。 2. **热备份与复制**:支持在线热备份,可以在不中断服务的情况下进行数据备份。此外,还提供...
1. **多版本并发控制**(MVCC):PostgreSQL采用MVCC实现事务隔离,确保读操作不会阻塞写操作,反之亦然,从而提供高度并发性能。 2. **SQL标准支持**:支持大部分SQL:2003标准,包括复杂查询、视图、存储过程、...
1. **事务性**:PostgreSQL支持ACID(原子性、一致性、隔离性、持久性)特性,保证了数据库操作的可靠性。 2. **多版本并发控制**(MVCC):允许多个用户同时读取和写入数据,提高了系统性能。 3. **强大的查询...
2. **ACID兼容**:PostgreSQL严格遵循ACID(原子性、一致性、隔离性和持久性)原则,确保数据库事务的可靠性和一致性。 3. **SQL标准支持**:PostgreSQL支持大部分SQL:2008标准,提供丰富的SQL语法和功能,如窗口...
- **ACID 事务**:PostgreSQL 遵循 ACID(原子性、一致性、隔离性和持久性)原则,确保了数据的完整性和一致性。 - **SQL 标准支持**:9.5.9 版本支持大部分 SQL:2008 标准,提供了丰富的 SQL 功能,如窗口函数、...
PostgreSQL是一种开源的对象关系型数据库管理系统(ORDBMS),它以其强大的功能、高度的稳定性以及对ACID(原子性、一致性、隔离性、持久性)事务的支持而受到广大开发者的青睐。在Ubuntu 22.04上离线安装PostgreSQL...