首页 > 其他分享 >MogDB openGauss如何实现事务的rollback

MogDB openGauss如何实现事务的rollback

时间:2024-03-15 15:24:08浏览次数:27  
标签:insert 回滚 rollback MogDB 事务 test openGauss select

MogDB/openGauss 如何实现事务的 rollback

本文出处:https://www.modb.pro/db/113262

数据库最主要的功能就是存储数据,然而我们在进行数据库操作时,却很容易发生误操作数据的情况,那么在 MogDB 中该如何实现误操作数据恢复呢?本文通过具体示例简要介绍如何通过回滚还原到误操作前的状态。

使用 gsql 连接 MogDB 时,SQL 语句执行完毕会自动提交,我们可以通过开启事务来避免误操作。事务的提交与回滚体现事务的原子性特征,事务语句要么提交,要么回滚。

准备工作:

登录数据库。

示例步骤:

  1. 创建测试表并插入数据

    create table test (id int,name char(10));
    insert into test values(1,'aa');
    insert into test values(2,'bb');
    
  2. 表中插入数据回滚

    --查看当前表中数据
    select * from test;
    --开启事务并插入数据,之后回滚操作
    begin;
    insert into test values(3,'cc');
    select * from test;
    rollback;
    --查看insert已经回滚
    select * from test;
    

通过上述示例可以看出,执行回滚之后,新插入的一行数据并未存入表中,更新和删除操作也是同样。

除此之外,事务执行过程中还可以创建保存点,如果不指定保存点,回滚操作会回滚到事务起始点,即 begin 开始的地方。在比较大的事务中,可以把执行过程分为几个步骤,每个步骤执行完成后创建一个保存点,后续步骤执行失败时,可回滚到之前的保存点,而不必回滚整个事务。

  1. 开启事务,在上表中继续插入数据,并创建两个保存点

    begin;
    insert into test values(3,'cc');
    savepoint savepoint1;
    insert into test values(4,'dd');
    savepoint savepoint2;
    insert into test values(5,'ee');
    
  2. 回滚至保存点

    --查看当前表数据
    select * from test;
    --回滚到保存点savepoint2,查看数据
    rollback to savepoint savepoint2;
    select * from test;
    --回滚到保存点savepoint1,查看数据
    rollback to savepoint savepoint1;
    select * from test;
    
  3. 提交事务,查看数据

    commit;
    select * from test;
    

通过上述示例可以看出,回滚到保存点 1 后,后续操作未提交,而保存点 1 之前的操作会提交,即最终表中存有 3 行数据。

显示开启事务并利用回顾机制是一种能够有效避免误操作的方法。

标签:insert,回滚,rollback,MogDB,事务,test,openGauss,select
From: https://www.cnblogs.com/renxyz/p/18075444

相关文章

  • MogDB openGauss数据完整性约束简介
    MogDB/openGauss数据完整性约束简介本文出处:https://www.modb.pro/db/124910创建基本表的同时,还可以指定表中数据完整性约束,例如在创建warehouse基本表时,通过分析可以得到如下结论:不同仓库必须有不同的w_id,且w_id不能为NULL。仓库必须有具体的名称,不能为NULL。仓库......
  • MogDB-openGauss触发器简介(2)
    MogDB/opengauss触发器简介(2)针对触发对象的触发事件一旦发生,就会激活触发器,触发器首先会检查触发条件,只有在满足触发条件的情况下,才会被真正地执行。其中元组级的触发器可以将更新前后的值嵌入到触发器的触发条件中。NEW.column_name:UPDATE或INSERT事件对应“新”元组,colu......
  • SAP中的COMMIT WORK 与 ROLLBACK WORK
    文章目录数据库中的COMMIT和ROLLBACKCOMMITWORKCOMMITWORKANDWAITROLLBACKWORK案例分享BAPI中的COMMIT和ROLLBACKBAPI_TRANSACTION_COMMITBAPI_TRANSACTION_ROLLBACK数据库中的COMMIT和ROLLBACKCOMMITWORK使用COMMITWORK语句后,对数据库的更改将不能取消。......
  • zabbix监控MogDB-openGauss之采集prometheus数据
    zabbix监控MogDB/openGauss之采集prometheus数据本文出处:https://www.modb.pro/db/187462前言市场上比较的监控方式有两种:zabbix和prometheus架构,对于MogDB/openGauss数据库来说,已经通过grafana+prometheus+opengauss_exporter的方式完成了监控部署,如何通过zabb......
  • 配置MogDB openGauss的grafana 的dashboard
    配置MogDB/openGauss的grafana的dashboard本文出处:https://www.modb.pro/db/188684概述我们已经介绍了prometheus+grafana+opengauss_exporter完成对MogDB/openGauss数据库的监控,但这只是第一步,我们还需要通过grafana的dashboard查看各个关注的指标项,本文主要......
  • openGauss开机自启动
    openGauss开机自启动在centos7.6操作系统上设置openGauss开机自启动,我们先来了解一下自定义服务的配置文件组成部分,共分为[Unit]、[Service]、[Install]三个部分。[Unit]Description=当前服务的简单描述Documentation=服务配置文件的位置Before=在某服务之前启动Aft......
  • openGauss与postgresql日常使用差异
    openGauss与postgresql日常使用差异密码加密postgresql默认密码加密方式是md5。openGauss默认密码加密方式是sha256。使用navicate、pgadmin3等客户端开发工具访问og,需要修改加密方式。如果在本地用用户名密码登陆数据库没问题。但是用其他工具连接数据......
  • PostgreSQL与openGauss之分区性能
    PostgreSQL与openGauss之分区性能概述PostgreSQL与openGauss分区表定义差异,请参考https://www.modb.pro/db/41393。openGauss1.1.0开始支持hash/list分区,hash分区表最多支持64个分区,否则会报:ERROR:Un-supportfeatureDETAIL:Thepartition’slengthshouldbe......
  • PostgreSQL与openGauss之关键字
    PostgreSQL与openGauss之关键字日常数据库运维的过程中可能对数据库关键字关注点并不是很高,但在程序开发的过程中,数据库对象建模要尽可能的避开数据库关键字的使用,否则在后续开发过程中需要用到各种转译的方法来将关键字转换为普通字符,会非常的麻烦。最近在openGauss上执行......
  • openGauss分区使用样例
    openGauss分区使用样例概述openGauss1.1.0版本开始,分区方式分为三种,分别是RANGE、HASH和LIST,官方文档中对于分区表的使用样例比较少,这里对各种分区使用方式做一下整理,方便以后快速调整使用。范围分区VALUESLESSTHAN语法格式分区策略的分区键最多支持4列分区键支持......