位置: 编程技术 - 正文

PostgreSQL教程(九):事物隔离介绍

编辑:rootadmin

推荐整理分享PostgreSQL教程(九):事物隔离介绍,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

在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教程(九):事物隔离介绍

读已提交 可串行化 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. 这是因为一个可串行化的事务在可串行化事务开始之后不能更改或者锁住被其他事务更改过的行。因此,当应用收到这样的错误信息时,它应该退出当前的事务然后从头开始重新进行整个事务。在应用程序中,也应该有必要的代码来专门处理该类错误。

最后需要说明的是,在绝大多数的情况下,读已提交级别均可适用,而且该级别的并发效率更高。只有在比较特殊的情况下,才手工将当前的事物隔离级别调整为可串行化或可重复读。

PostgreSQL教程(十四):数据库维护 一、恢复磁盘空间:在PostgreSQL中,使用delete和update语句删除或更新的数据行并没有被实际删除,而只是在旧版本数据行的物理地址上将该行的状态置为

PostgreSQL教程(十二):角色和权限管理介绍 PostgreSQL是通过角色来管理数据库访问权限的,我们可以将一个角色看成是一个数据库用户,或者一组数据库用户。角色可以拥有数据库对象,如表、索

PostgreSQL教程(十三):数据库管理详解 一、概述:数据库可以被看成是SQL对象(数据库对象)的命名集合,通常而言,每个数据库对象(表、函数等)只属于一个数据库。不过对于部分系统表而言

标签: PostgreSQL教程(九):事物隔离介绍

本文链接地址:https://www.jiuchutong.com/biancheng/319459.html 转载请保留说明!

上一篇:PostgreSQL教程(十):性能提升技巧

下一篇:PostgreSQL教程(十四):数据库维护

  • 一次性医用外科口罩哪个牌子好
  • 进项税额加计抵减会计分录
  • 基金份额股权转让
  • 进销存工作流程
  • 增值税专用发票和普通发票的区别
  • 员工奖金分两次发怎么交税?
  • 客户已经抵扣的发票怎么开负数发票给对方
  • 资产负债表的编制时间
  • 慈善会可以开什么票据
  • 劳务分包有执照没资质能开票吗?
  • 福利费申报个人所得税该如何进行?
  • 增值税专用发票电子版
  • 个人两处以上所得经营所得怎么申报
  • 认缴制的期限是多久
  • 用工会经费发放福利
  • 固定资产报废处置账务处理
  • 专票丢了可以拿复印件在所得税前列支吗
  • 单位社保扣款
  • 个税计提比实际缴纳多怎么办
  • 股权转让缴印花税公司用进账吗
  • 固定资产发生非正常损失相关题目
  • 关于递延所得税的例题
  • 企业之间承兑汇票贴现违法吗知乎
  • 增值税留抵税额会计科目
  • 关联业务往来年度报告表
  • 电脑开机后无显示,但主机电源指示灯长亮
  • 长期待摊费用摊销明细表
  • 关闭自动更新应用程序
  • 物业专项维修资金可以退还吗
  • 个人所得税计提缴纳会计分录
  • bios中英文对照表图新版
  • 所得税 减半
  • php框架怎么使用
  • 存货跌价准备的分录
  • 支付航天信息服务费怎么入账
  • 销售多余材料的收入属于收入吗
  • yolov5tiny
  • 网易游戏二面
  • 增值税专用发票进项
  • 管理费用科目核算的内容
  • 端午节补几天工资
  • mysql底层是什么
  • 业务招待费汇算清缴怎么填表
  • 年末未分配利润减去年初未分配利润等于什么
  • 签三方协议需要法人本人去吗
  • 建筑业外管证预审要多久
  • mysql基础知识点
  • 弥补以前年度亏损怎么算
  • 金税四期能监控到公户吗
  • 企业开办期间账务处理
  • 追索权行使的形式要件是什么
  • 现金日记账的登记证据有
  • 建筑企业增值税怎么算
  • 开专票还要另外再交钱么
  • 企业如何优化管理
  • 不开票收入怎么报税
  • 工程量应当按照什么计算
  • 什么公司转让需要交税
  • 购入的无形资产加计扣除怎么算
  • 公司运营成本如何计算
  • sqlserver存储过程怎么查看
  • 系统有乱码怎么解决
  • cmos是一种什么芯片
  • mac截图快捷键设置
  • svchos1.exe - svchos1是什么教程 有什么作用
  • reald是什么格式
  • win7系统打开我的电脑一闪
  • win7系统中怎样
  • Linux编译内核无法启动
  • jquery easyui开发指南
  • 学习计划
  • 下列关于android的说法中,错误的是
  • shell脚本 -ne 0
  • python制作爬虫教程
  • jQuery使用contains过滤器实现精确匹配方法详解
  • python sco
  • 海关编码查询 商品编码查询
  • 个人所得税全年不到60000,单月超过
  • 开票信息不一致怎么回事
  • 增值税税控系统专用设备及技术维护费
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设