首页 > 数据库 >postgressql——数据库快照(5)

postgressql——数据库快照(5)

时间:2024-05-31 17:59:39浏览次数:22  
标签:postgressql 事务 快照 隔离 数据库 可能 提交 级别

事物快照

一个数据页包含了每一行的多个版本,每一行的可见版本一起构成一个快照。
快照只包含在创建快照时当前已提交的数据,在这个特定的时刻提供了一个一致性的视图,这个视图我们就可以叫做快照。

为了确保数据的隔离性,每一个事物都有自己的快照,这就意味着不同的事物在不同的时间点可以看到不同的快照。但是单个快照内部是一致的。

在 Read Committed 隔离级别中,每个语句开始都会有一个快照,并且在该语句执行期间,仍然保持活动状态。

在Repeatable Read和Serializable隔离级别中,每个事物的第一条语句开始之处只会有一个快照,在整个事物结束之前,该快照一直是活动的。
在这里插入图片描述

隔离级别

pg数据库事务的隔离级别有以下四种:
(1)读未提交(READ UNCOMMITTED)
(2)读已提交(READ COMMITTED)
(3)重复读(REPEATABLE READ)
(4)串行化(SERIALIZABLE)

并发事务,不希望发生的行为

(1)脏读:一个事务读取了另一个未提交的事务写入的数据。
(2)不可重复读:一个事务重新读取前面读取过的数据时,发现该数据已改变。
(3)幻读:一个事务开始后,需要根据数据库中现有的数据做一些更新,于是重新执行一个查询,返回符合查询条件的行,这时发现这些行因为其它最近提交的事务而发生了改变,导致现有事务如果再进行下去可能发发生逻辑上的错误。

不同事务隔离级别的行为:

隔离级别 脏读 不可重复读 幻读
读未提交 可能 可能 可能
读已提交 不可能 可能 可能
重复读 不可能 不可能 可能
可串行化 不可能 不可能 不可能

但是PostgreSQL里默认的隔离级别是"读已提交"。所以读未提交在pg中脏读是不可能的,可重复读在pg中幻读是不可能的。

在PostgreSQL里,可以请求四种可能的事务隔离级别中的任意一种。
但在内部,实际上只有三种独立的隔离级别,分别对应读已提交,可重复读和可串行化
如果选择了读未提交的级别, 实际上用的是读已提交

设置事务的隔离级别

要设置一个事务的事务隔离级别,使用SET TRANSACTION命令:


SET TRANSACTION transaction_mode [, ...]
SET TRANSACTION SNAPSHOT snapshot_id
SET SESSION CHARACTERISTICS AS TRANSACTION transactio

标签:postgressql,事务,快照,隔离,数据库,可能,提交,级别
From: https://blog.csdn.net/Re_view/article/details/139271975

相关文章

  • 数据库物理存储
    数据库文件布局本节描述文件和目录级别的存储格式。传统上,数据库集群使用的配置和数据文件一起存储在集群的数据目录中,通常称为PGDATA(以可用于定义它的环境变量的名称命名)。PGDATA的常见位置是/var/lib/pgsql/data。由不同服务器实例管理的多个集群可以存在于同一台计算机上。......
  • mongodb数据库查询调优之explain方法详解
    在MongoDB中,explain()方法可以帮助我们了解查询语句的执行计划和性能。通过分析explain()的结果,我们可以找出潜在的性能问题并对其进行优化。以下是使用explain()方法对MongoDB查询语句进行优化的步骤:使用explain()方法获取查询的执行计划:db.collection.find(query).exp......
  • 【MySQL】数据库优化
    一、优化数据类型在MySQL中不同的数据类型长度不同,在磁盘上所需要的存储空间也不同,如果数据库中使用不合理的数据类型,会造成很大的空间浪费,并且在数据插入与读取时,也会造成MySQL的性能低下。更小的数据类型更好如果没有特殊情况,尽量使用可以正确保存数据的最小数据类型,因为更......
  • 达梦命令行使用管理员连接数据库 并切换活动数据库
    在达梦数据库中,管理员通常是指拥有SYSDBA权限的用户。要使用管理员身份连接数据库并切换到另一个数据库,你需要遵循以下步骤:退出当前会话:如果你已经在某个数据库上建立了连接,首先退出当前会话:quit;以管理员身份连接:使用以下格式以SYSDBA权限连接到数据库:sqlplus/n......
  • 墨天轮《2023年中国数据库行业年度分析报告》正式发布!
    为明晰发展脉络,把握未来趋势,墨天轮于5月29日正式发布 《2023年中国数据库年度行业分析报告》。该报告由墨天轮联合业界专家学者共同编写,共330页,旨在梳理和洞察中国数据库行业的发展趋势、技术创新、市场动态以及面临的挑战,为数据库行业的产学研用提供有价值的参考信息,推动行业的......
  • 31.MySQL数据库【一】基础介绍
    【一】数据库初识1)存储数据的演变过程基于内存保存文件操作json模块搭建TCP的客户端和服务端,TCP服务端用作存储服务,TCP客户端用于上传和下载数据存储数据的位置就是数据库2)数据库本质就是一块基于网络通信保存数据的应用程序3)数据库的介绍1.关联性数据库(存......
  • 32.MySQL数据库【二】存储引擎与基本数据类型.
    【一】MySQL之存储引擎1)介绍针对不同的数据有不同的处理机制,存储引擎就是不同的处理机制2)MySQL主要的存储引擎1.innodb是MySQL5.5版本之后的默认存储引擎支持事务、外锁、外键2.myisam是MySQL5.5版本之前的默认存储引擎速度比innodb快,但数据安全性较弱3.memory......
  • 34.MySQL数据库【四】过滤条件
    过滤条件【一】语法select*/字段名from*/表名where*/字段名=字段值;--执行顺序from起手知道是那张表where根据过滤条件在表中过滤数据select再过滤出自己想要的数据【二】准备的数据#创建表createtablefilt_eg( idintnotnulluniqueauto_increment,......
  • 33.MySQL数据库【三】约束条件
    约束条件限制表中的数据,保证数据的准确性和可靠性而存在的限制规则【一】非空约束(notnull)限制指定字段不能为空#建表createtableeg( namevarchar(32)notnull, hobbyvarchar(32));#name字段不能为空【二】唯一性约束(unique)限制字段具有唯一性,不能重复,但能为......
  • 35.MySQL数据库【五】多表查询和子查询
    多表查询和子查询【一】概念子查询:将一条SQL语句的查询结果加括号当做另外一条SQL语句的查询结果链表查询:先将多张表拼接到一起,形成一张大表,让后基于单表查询获取数据1)创建数据#建表createtabledep( idintPRIMARYKEYAUTO_INCREMENT,namevarchar(20));......