PostgreSQL基础(九):PostgreSQL的事务介绍

文章目录

PostgreSQL的事务介绍

一、什么是ACID(常识)

二、事务的基本使用

三、保存点(了解)


PostgreSQL的事务介绍

一、什么是ACID(常识)

在日常操作中,对于一组相关操作,通常要求要么都成功,要么都失败。在关系型数据库中,称这一组操作为事务。为了保证整体事务的安全性,有ACID这一说:

  • 原子性A:事务是一个最小的执行单位,一次事务中的操作要么都成功,要么都失败。

  • 一致性C:在事务完成时,所有数据必须保持在一致的状态。(事务完成后吗,最终结果和预期结果是一致的)

  • 隔离性:一次事务操作,要么是其他事务操作前的状态,要么是其他事务操作后的状态,不存在中间状态。

  • 持久性:事务提交后,数据会落到本地磁盘,修改是永久性的。

PostgreSQL中,在事务的并发问题里,也是基于MVCC,多版本并发控制去维护数据的一致性。相比于传统的锁操作,MVCC最大的有点就是可以让 读写互相不冲突

当然,PostgreSQL也支持表锁和行锁,可以解决写写的冲突问题。

PostgreSQL相比于其他数据,有一个比较大的优化,DDL也可以包含在一个事务中。比如集群中的操作,一个事务可以保证多个节点都构建出一个表,才算成功。

 

二、事务的基本使用

首先基于前面的各种操作,应该已经体会到了,PostgreSQL是自动提交事务。跟MySQL是一样的。

可以基于关闭PostgreSQL的自动提交事务来进行操作。

 

但是上述方式比较麻烦,传统的方式。

就是三个命令:

  • begin:开始事务

  • commit:提交事务

  • rollback:回滚事务

-- 开启事务
begin;
-- 操作
insert into test values (7,'bbb',12,5);
-- 提交事务 
commit;

三、保存点(了解)

比如项目中有一个大事务操作,不好控制,超时有影响,回滚会造成一切重来,成本太高。

我针对大事务,拆分成几个部分,第一部分完成后,构建一个保存点。如果后面操作失败了,需要回滚,不需要全盘回滚,回滚到之前的保存点,继续重试。

有人会发现,破坏了整体事务的原子性。

但是只要操作合理,可以在保存点的举出上,做重试,只要重试不成功,依然可以全盘回滚。

比如一个电商项目,下订单,扣库存,创建订单,删除购物车,增加用户积分,通知商家,这个其实就是一个大事务。可以将扣库存和下订单这种核心功能完成后,增加一个保存点,如果说后续操作有失败的,可以从创建订单成功后的阶段,再做重试。

不过其实上述的业务,基于最终一致性有更好的处理方式,可以保证可用性。

简单操作一下:

-- savepoint操作
-- 开启事务
begin;
-- 插入一条数据
insert into test values (8,'铃铛',55,11);
-- 添加一个保存点
savepoint ok1;
-- 再插入数据,比如出了一场
insert into test values (9,'大唐官府',66,22);
-- 回滚到之前的提交点
rollback to savepoint ok1;
-- 就可以开始重试操作,重试成功,commit,失败可以rollback;
commit;

  • 📢博客主页:https://lansonli.blog.csdn.net

  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉

  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python数据分析-问卷数据分析(地理课)

学生问卷 分析学生背景:班级分布、每周地理课数量、地理成绩分布 根据问卷,可以知道: 班级分布: 七年级有118名学生。 八年级有107名学生。 每周地理课的数量: 有28名学生每周有1节地理课。 有99名学生每周有2…

重新学习STM32(2)NVIC

概念简介 NVIC,即嵌套向量中断控制器,控制着中断相关的功能,是内核里面的一个外设。 中断在单片机编程中的作用是使单片机能及时响应需要立即处理的事件,但是这些事件也分紧急和非紧急,因此需要优先级来区分。…

Spring AI 第二讲 之 Chat Model API 第八节Anthropic 3 Chat

Anthropic Claude 是一系列基础人工智能模型,可用于各种应用。对于开发人员和企业来说,您可以利用 API 访问,直接在 Anthropic 的人工智能基础架构之上进行构建。 Spring AI 支持用于同步和流式文本生成的 Anthropic 消息 API。 Anthropic …

二轴机器人大米装箱机:技术创新引领智能包装新潮流

在科技日新月异的今天,自动化和智能化已成为各行各业追求高效、精准生产的关键。作为粮食加工行业的重要一环,大米装箱机的技术创新与应用价值日益凸显。其中,二轴机器人大米装箱机以其高效、稳定、智能的特点,成为市场的新宠。星…

使用 IPSET 添加 CDN 节点 IP(IPv4/IPv6)到防火墙白名单

明月的服务器一直使用的是 iptables,随着近几年 IPv6 的普及,明月切身体会到还是 IPSET 最方便了,无论你是 IPv4 还是 IPv6 都可以方便的管理,无论你是加入白名单还是黑名单,都非常的简单高效!今天就参照明月自己的实操…

Python 机器学习 基础 之 【实战案例】新闻内容分类实战

Python 机器学习 基础 之 【实战案例】新闻内容分类实战 目录 Python 机器学习 基础 之 【实战案例】新闻内容分类实战 一、简单介绍 二、新闻内容分类实战 三、数据准备 四、分词与清洗工作 1、读取数据 2、使用 jieba 分词器进行分词,使用 Pandas 创建Data…

R语言探索与分析19-CPI的分析和研究

一、选题背景 CPI(居民消费价格指数)作为一个重要的宏观经济指标,扮演着评估通货膨胀和居民生活水平的关键角色。在湖北省这个经济活跃的地区,CPI的波动对于居民生活、企业经营以及政府宏观经济政策制定都具有重要的影响。因此&a…

Java——面向对象进阶(一)

前言 面向对象进阶(一):static,继承,this和super关键字 文章目录 一、static1.1 静态变量1.2 静态方法1.3 静态变量和静态方法在内存中 二、继承2.1 概念2.2 继承的特点和能继承什么2.3 继承中的重写2.4 this和super关键字 一、static 在 Jav…

Java学习笔记(六):Array List、学生管理系统、学生管理系统升级版

目录 一、ArrayList 1.1集合和数组的优势对比: 1.2 ArrayList类概述 1.3 ArrayList类常用方法 1.3.1 构造方法 1.3.2 成员方法 1.4 ArrayList存储字符串并遍历 1.5 ArrayList存储学生对象并遍历 1.6 查找用户的索引 1.7 添加手机对象并返回要求的数据 二…

谈AI 时代网站的未来趋势

以大语言模型为代表的AI 技术迅速发展,将会影响原有信息网络的方式。其中一个明显的趋势是通过chatGPT 对话代替搜索引擎和浏览器来获取信息。 互联网时代,主要是通过网站(website)提供信息。网站主要为人类阅读的方式构建的。主要…

数据结构笔记1 绪论,线性表

学习视频: 第01周c--1.2基本概念和术语1_哔哩哔哩_bilibili 01《数据结构》绪论_哔哩哔哩_bilibili 数据: 1.数值型的数据:整数,实数 2.非数值型的数据:文字、图像.. 数据元素:(元素&#xf…

人类语言处理nlp部分笔记——四、GPT3

参考自李宏毅课程-人类语言处理 四、GPT3 1. 介绍 GPT-3是一个language model,它的参数量相当巨大,是ELMO的2000倍。 2. GPT-3的野心 虽然GPT-3和BERT等模型一样,但是GPT-3是不需要针对特定的task做finetune的,也就是说GPT-3…

React 18

创建 React 18 脚手架项目 全局安装 create-react-app npm install -g create-react-app yarn global add create-react-app . 确认是否已安装 create-react-app npm list -g create-react-app yarn global list | grep create-react-app . 如果安装失败 有时&#xff0…

继续引爆!5天连出2个里程碑成果,离子阱量子计算机嗨翻天!

5月30日,清华大学的一项成果被Nature审稿人称为“量子模拟领域的巨大进步”!“值得关注的里程碑”!该成果就是中国科学院院士、清华大学交叉信息研究院教授段路明带领研究组在量子模拟计算领域取得的重要突破。段路明研究组首次实现512离子二…

码蹄集部分题目(2024OJ赛18期;并查集+ST表+贪心)

1🐋🐋史莱姆融合(钻石;并查集) 时间限制:1秒 占用内存:128M 🐟题目描述 🐟题目思路 这道题目使用并查集,同一集合的所有元素的最顶上的祖父节点是统一的。…

获取当前周周一和周日的日期(格式20240607)

获取当前周周一和周日的日期(格式20240607) function getWeekStartAndEndDate() {const today new Date() // 获取当前日期const dayOfWeek today.getDay() // 获取今天是周几,返回值是0(周日)到6(周六&…

逆波兰表达式

目录 一、定义 二、算法步骤 三、代码实现 一、定义 逆波兰表达式又叫做后缀表达式,是一种没有括号,并严格遵循“从左到右”运算的后缀式表达方法。 二、算法步骤 1、首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。 …

20240607每日通信--------VUE3前端引入scoket-io,后端引入Netty-SocketIO,我成功了,希望一起交流沟通

无语 前置: VUE3 前端集成scoket-io socket.io-client Sringboot 3.0JDK17集成Netty-SocketIO Netty-SocketIO 失败原因一: 前期决定要写demo时候,单独了解了,后端引入Netty-SocketIO注意事项,详见我先头写的博客 前…

路径

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 用于定位一个文件或者目录的字符串被称为一个路径。在程序开发时,通常涉及两种路径,一种是相对路径,另一种是绝对…

G5 - Pix2Pix理论与实战

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目录 理论知识图像翻译CGANU-NetPix2Pix损失函数模型结构生成器差别器 模型效果总结与心得体会 理论知识 前面已经学习了GAN与CGAN,这节开始学习P…