当前位置: 首页 > news >正文

PostgreSQL中的事务隔离

1. 事务隔离的概念

在数据库管理系统中,事务隔离是一项重要的功能,它能确保在并发访问数据库时事务之间能够独立运行,不会相互干扰。数据库系统通常支持不同级别的事务隔离,用来满足不同应用程序之间的需求

2. 事务隔离的种类 

常见的事务隔离的种类也一共有四种包括读未提交、已提交、可重复读和可序列化对于并发的事务,常见的一些可能发生的行为包括

  1. 脏读:一个事务读取了另一个未提交的事务写入的数据
  2. 不可重复读:一个事务重新读取了前面读取过的数据,但是该数据已经发生了改变
  3. 幻读:一个事务开始之后,需要根据数据库中现有的数据做一些更新,于是重新执行一个查询,返回符合查询条件的行,这个时候发现因为其他最近提交的事务自身发生改变,导致现有事务如果继续执行可能会发生错误。

下表代表的是不同的事务隔离级别对应的可能会发生行为的对照关系。

隔离级别

脏读

不可重复读

幻读

读未提交

可能

可能

可能

读已提交

不可能

可能

可能

重复读

不可能

不可能

可能

可串行化

不可能

不可能

不可能

PG中默认的事务隔离级别是读已提交,而读未提交相当于是读已提交的一个更弱的版本。

这是因为读已提交的隔离级别要求一个事务只能看到已经提交的数据修改,这意味着一个事务不能读取另一个事务尚未提交的数据变换。那么这种隔离级别提供了一定的数据一致性,防止脏读。这也是为什么PG中采用这种隔离级别为默认的隔离级别,因为他的适应性比较广。

而相比于读已提交,读未提交的隔离级别不要求事务等待其他事务的提交,它允许一个事务读取另一个事务尚未提交的数据变化,这种隔离级别容易导致脏读,因为一个事务可能会读取到另一个正在被修改的事务,而这些事务可能会回滚,从而导致数据状态前后不一致

并且PG中内部没有实现读未提交的隔离级别,因为读未提交的隔离级别存在严重的数据一致性问题,不符合事务的ACID特性,所以并未实现读未提交,主要还是为了确保数据库的一致性和可靠性。

2.1  读已提交

  1. PG默认事务隔离级别
  2. 事务只能看到已经提交的数据
  3. 可能会发生不可重复读和幻读

案例

首先创建一个示例表,其中包含如下的信息:

create table products(id serial primary key,name varchar(50),price numeric(10,2));

select * from products;

会话1:(读操作

begin;

select * from products where id=1;

会话2:(写操作)

begin;

update products set price =66 where id = 1;

此时回到会话1:查询id=1,发现数据还是原来的数据,

会话2:

commit;

当会话2提交以后,回到会话1,就会发现数据进行了更改

这个案例说明了在读已提交隔离级别中,一个事务只能看到其他事务已经提交的数据修改,如果事务未提交,那么对于查询事务来说,这些修改是不可见的,直到其他事务提交为止

2.2 可重复读

  1. 保证在同一事务内的查询不会受到其他事务的影响
  2. 防止不可重复读,但是仍然可能发生幻读
  3. 适用场景:需要一定程度的数据一致性,可以容忍轻微的幻读。

案例

沿用上面的products表的数据,将修改的数据修改回原样。

会话1:

begin isolation level repeatable read ;

select * from products where id =1;

会话2:

此时会话2.执行更新语句,但不提交,在会话1中查看数据。

会话2:

对事务进行提交,再在事务1中查询对应的数据

可以发现,在会话1中,无论会话2提不提交,查询的结果都保持不变,即使会话2提交更新操作,查询结果仍然不变。

此时,除非对会话1也进行提交,才可以看到改动就相当于在事务的一开始对数据进行了快照,无论如何改动,都不影响读取的结果。

2.3 串行化

  1. 最高级别的隔离,确保事务之间没有任何的交错或者是并发问题
  2. 通过锁定数据来实现,防止任何形式的并发问题,包括脏读、不可重复读、幻读
  3. 性能最差,因为他几乎完全禁止并发
  4. 适用场景:对数据一致性要求非常高,可以容忍较低的性能.
  5. 事务2会进行回滚,提交失败以后,事务的回滚其实就相当于没有执行

案例:

会话1:

开始串行化隔离,插入一条新的数据,查询现在的价格

会话2;

执行与会话1同样的操作,其中开启事务的语句是同时执行的,然后再分别插入数据。

可以看到,两个会话中插入的语句只有在自己的事务中才可以查看到

此时将会话1事务进行提交,然后将会话2事务进行提交,可以看到,会话1提交成功,而会话2会失败,且会话2中的事务发生了回滚,舍弃了之前的插入操作,

重新查询两个会话中表的信息发现只能查询到会话1提交的事务。

相关文章:

PostgreSQL中的事务隔离

1. 事务隔离的概念 在数据库管理系统中,事务隔离是一项重要的功能,它能确保在并发访问数据库时事务之间能够独立运行,不会相互干扰。数据库系统通常支持不同级别的事务隔离,用来满足不同应用程序之间的需求。 2. 事务隔离的种类…...

基于Rye的Django项目通过Pyinstaller用Github工作流简单打包

前言 Rye的介绍和安装 Ryehttps://rye.astral.sh/Rye 完整使用教程_安装rye-CSDN博客https://blog.csdn.net/zhenndbc/article/details/144544692 正文 项目建立 配置好环境后 新建文件夹 新建文件夹,进入项目 初始化 rye init下载依赖 rye syncpycharm 打…...

ubuntu 20.04 C++ 源码编译 cuda版本 opencv4.5.0

前提条件是安装好了cuda和cudnn 点击下载: opencv_contrib4.5.0 opencv 4.5.0 解压重命名后 进入opencv目录,创建build目录 “CUDA_ARCH_BIN ?” 这里要根据显卡查询一下,我的cuda是11,显卡1650,所以是7.5 查询链接:…...

【VUE】第一期——初使用、基本语法

目录 0 前言 1 准备工作 1.1 创建vue实例 1.2 vue开发者工具 2 插值表达式 2.1 基本用法 3 常用指令 3.1 内容渲染指令 3.1.1 v-text 3.1.2 v-html 3.2 条件渲染指令 3.2.1 v-show 3.2.2 v-if 3.2.3 v-else 和 v-else-if 3.3 事件绑定指令 3.3.1 内联语句 3.3…...

计算光学成像与光学计算概论

计算光学成像所涉及研究的内容非常广泛,虽然计算光学成像的研究内容是发散的,但目的都是一致的:如何让相机记录到客观实物更丰富的信息,延伸并扩展人眼的视觉感知。总的来说,计算光学成像现阶段已经取得了很多令人振奋…...

开启科创服务新篇章:八月瓜科技CRM数字化管理系统成功上线

近日,北京八月瓜科技有限公司(以下简称 “八月瓜科技”)与纷享销客达成深度战略合作,成功部署并上线CRM数字化管理系统。此次合作是八月瓜科技在数字化转型进程中的重要里程碑,标志着其在科技创新服务领域的数字化变革…...

AI提示词(Prompt)的理解和学习指南

AI提示词(Prompt)的理解和学习指南 一、什么是AI提示词? AI提示词(Prompt)是用户输入给人工智能模型的指令或问题,用于引导模型生成特定类型的回答或内容。它如同与AI沟通的“钥匙”,设计得当…...

记录一些面试遇到的问题

重载和重写的区别 重载是overload,覆盖是override 重载属于编译时多态,覆盖属于运行时多态 运行时多态和编译时多态 运行时多态指的是在运行的时候才知道要调用哪一个函数,编译时多态是指在编译的时候就知道调用哪一个函数。 运行时多态…...

OpenHarmony4.0_Linux环境搭建

查看链接:OpenHarmony4.0_Linux环境搭建https://www.yuque.com/xinzaigeek/jishu/fs9msruqhd5nhw4i...

DeepSeek开源Day5:3FSsmallpond技术详解

2 月 24 日,DeepSeek 启动 “开源周”,第四个开源的代码库为 3FS&smallpond(又是一下发布了两个)。 3FS(Fire-Flyer File System)是 DeepSeek 内部开发的一款高性能分布式文件系统,旨在为 A…...

Java集合面试篇

目录 1.概念 1.1.数组与集合的区别,用过哪些? 1.2.说说Java中的集合? 1.3.Java中的线程安全的集合是什么? 1.4.集合遍历的方法有哪些? 2.List 2.1.list可以一边遍历一边修改元素吗? 2.2.Arraylist和…...

plt和cv2有不同的图像表示方式和颜色通道顺序

在处理图像时,matplotlib.pyplot (简称 plt) 和 OpenCV (简称 cv2) 有不同的图像表示方式和颜色通道顺序。了解这些区别对于正确处理和显示图像非常重要。 1. 图像形状和颜色通道顺序 matplotlib.pyplot (plt) 形状:plt 通常使用 (height, width, cha…...

Sqlserver安全篇之_手工创建TLS用到的pfx证书文件

Sqlserver官方提供的Windows Powershell脚本 https://learn.microsoft.com/zh-cn/sql/database-engine/configure-windows/configure-sql-server-encryption?viewsql-server-ver16 # Define parameters $certificateParams {Type "SSLServerAuthentication"Subje…...

基于RapidOCR与DeepSeek的智能表格转换技术实践

基于RapidOCR与DeepSeek的智能表格转换技术实践 一、技术背景与需求场景 在金融分析、数据报表处理等领域,存在大量图片格式的表格数据需要结构化处理。本文介绍基于开源RapidOCR表格识别与DeepSeek大模型的智能转换方案,实现以下典型场景: …...

创建阿里云CDN

创建阿里云CDN CDN域名管理 SSL证书上传...

tomcat的web管理

进入到conf cd /usr/local/tomcat/conf/备份tomcat-users.xml cp tomcat-users.xml{.,bak}编辑tomcat-users.xml vim tomcat-users.xml增加以下内容 配置tomcat-users.xml <role rolename"manager-gui"/><role rolename"admin-gui"/><use…...

【Linux系统】-----进程初相识:原理与概念全解析

Linux系列 文章目录 Linux系列前言一、进程的概念二、进程的管理三、Linux操作系统的进程管理3.1、进程标识符3.2、查看进程3.3、查看进程的PID和PPID 前言 经过前两篇文章的铺垫&#xff0c;我们对操作系统的管理方式已经有了比较完整的认识&#xff0c;今天我们将学习Linux比…...

分布式系统设计(架构能力)

一、微服务架构 服务治理 Nacos 注册中心&#xff08;AP模式&#xff09; CAP选择&#xff1a;Nacos 默认采用 AP 模式&#xff08;可用性 分区容忍性&#xff09;&#xff0c;通过心跳检测实现服务健康管理。服务发现&#xff1a;客户端定时拉取服务列表&#xff0c;支持权重…...

171. Excel 表列序号

Excel 表列序号 题目描述尝试做法推荐做法 题目描述 给你一个字符串 columnTitle &#xff0c;表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如&#xff1a; A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1: 输入: colum…...

在 Java 中使用 Apache POI 为 Word 文档添加水印

在 Java 中使用 Apache POI 为 Word 文档添加水印 在日常办公中&#xff0c;我们经常需要给 Word 文档添加水印&#xff0c;以标明文件的机密性或归属权。本文将介绍如何使用 Apache POI 库在 Java 中给 Word 文档添加水印。 技术栈 Apache POI&#xff1a;用于操作 Word 文…...

专业日志分析利器glogg:解决大规模日志监控与智能搜索的技术方案

专业日志分析利器glogg&#xff1a;解决大规模日志监控与智能搜索的技术方案 【免费下载链接】glogg A fast, advanced log explorer. 项目地址: https://gitcode.com/gh_mirrors/gl/glogg 在当今的分布式系统和微服务架构中&#xff0c;日志分析已成为系统运维、故障排…...

ThinkPad风扇控制终极指南:TPFanCtrl2完全使用教程

ThinkPad风扇控制终极指南&#xff1a;TPFanCtrl2完全使用教程 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 你是否曾被ThinkPad风扇的突然加速打扰了工作专注&#…...

小白程序员必看!收藏这份AI学习指南,从0到1逆袭高薪职业(内含经验分享)

作者原UI设计师&#xff0c;因职业瓶颈被辞退后转行AI领域。文章分享了学习AI的动机、遇到的困难、心得体会以及成功转行后的薪资提升经历。强调主动拥抱变化的重要性&#xff0c;建议多练习、多总结&#xff0c;并感谢老师们的耐心指导。最后&#xff0c;作者表示将继续深耕AI…...

明日方舟终极自动化助手:MAA如何彻底解放你的游戏时间

明日方舟终极自动化助手&#xff1a;MAA如何彻底解放你的游戏时间 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手&#xff0c;全日常一键长草&#xff01;| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://git…...

Claude Code、Cursor、GitHub Copilot、Codex 怎么选?别再按“哪个最强”来判断了

AI 编程工具越来越像“工具箱”&#xff0c;而不是单个聊天窗口。如果你还在问“Claude Code、Cursor、Copilot、Codex 哪个最强”&#xff0c;这个问题本身就有点偏。更好的判断方式是&#xff1a;你当前的任务发生在哪里、需要改多少文件、是否需要跑测试、结果要不要进入 PR…...

[安全攻防实验] 环境变量:Set-UID程序中的隐形攻击向量

1. 环境变量与Set-UID程序的安全隐患 在Linux系统中&#xff0c;环境变量就像是一个随身携带的"工具箱"&#xff0c;里面装着各种程序运行时需要的信息。但你可能不知道&#xff0c;这个看似普通的工具箱&#xff0c;在遇到Set-UID程序时&#xff0c;可能会变成黑客…...

打破平台壁垒:Windows上安装APK文件的完整解决方案

打破平台壁垒&#xff1a;Windows上安装APK文件的完整解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾想过在Windows电脑上直接运行安卓应用&#xff…...

Fast-GitHub:打破GitHub访问壁垒的智能加速方案

Fast-GitHub&#xff1a;打破GitHub访问壁垒的智能加速方案 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 你是否曾因GitHub仓库克…...

别再只盯着wx.login了!SpringBoot后端实战:用getPhoneNumber接口搞定小程序用户手机号绑定

微信小程序用户手机号绑定&#xff1a;SpringBoot后端深度实践指南 在当今移动互联网生态中&#xff0c;微信小程序已成为连接用户与服务的重要桥梁。对于需要强实名认证或直接触达用户的业务场景&#xff08;如电商交易、金融服务、政务办理等&#xff09;&#xff0c;仅依赖w…...

δ - mem:提升大型语言模型内存效率,得分最高可达 1.31 倍!

快速通道可了解 arXiv 成为独立非营利组织的情况&#xff0c;也能直达康奈尔大学官网。同时&#xff0c;还能通过链接进行捐赠&#xff0c;支持 arXiv 的发展。搜索与导航提供了多种搜索途径&#xff0c;可在所有字段&#xff08;标题、作者、摘要等&#xff09;进行搜索。还有…...