MogDB/openGauss如何实现事务的rollback
MogDB/openGauss 如何实现事务的 rollback
本文出处:https://www.modb.pro/db/113262
数据库最主要的功能就是存储数据,然而我们在进行数据库操作时,却很容易发生误操作数据的情况,那么在 MogDB 中该如何实现误操作数据恢复呢?本文通过具体示例简要介绍如何通过回滚还原到误操作前的状态。
使用 gsql 连接 MogDB 时,SQL 语句执行完毕会自动提交,我们可以通过开启事务来避免误操作。事务的提交与回滚体现事务的原子性特征,事务语句要么提交,要么回滚。
准备工作:
登录数据库。
示例步骤:
创建测试表并插入数据
create table test (id int,name char(10));
insert into test values(1,'aa');
insert into test values(2,'bb');
表中插入数据回滚
--查看当前表中数据
select * from test;
--开启事务并插入数据,之后回滚操作
begin;
insert into test values(3,'cc');
select * from test;
rollback;
--查看insert已经回滚
select * from test;
通过上述示例可以看出,执行回滚之后,新插入的一行数据并未存入表中,更新和删除操作也是同样。
除此之外,事务执行过程中还可以创建保存点,如果不指定保存点,回滚操作会回滚到事务起始点,即 begin 开始的地方。在比较大的事务中,可以把执行过程分为几个步骤,每个步骤执行完成后创建一个保存点,后续步骤执行失败时,可回滚到之前的保存点,而不必回滚整个事务。
开启事务,在上表中继续插入数据,并创建两个保存点
begin;
insert into test values(3,'cc');
savepoint savepoint1;
insert into test values(4,'dd');
savepoint savepoint2;
insert into test values(5,'ee');
回滚至保存点
--查看当前表数据
select * from test;
--回滚到保存点savepoint2,查看数据
rollback to savepoint savepoint2;
select * from test;
--回滚到保存点savepoint1,查看数据
rollback to savepoint savepoint1;
select * from test;
提交事务,查看数据
commit;
select * from test;
通过上述示例可以看出,回滚到保存点 1 后,后续操作未提交,而保存点 1 之前的操作会提交,即最终表中存有 3 行数据。
显示开启事务并利用回顾机制是一种能够有效避免误操作的方法。
MogDB/openGauss如何实现事务的rollback的更多相关文章
- PL/SQL 一个数据对象一个事务(rollback,submit)
		
/*********************************************** 一个数据对象一个事务(且记录错误信息到处理对象) ************************** ...
 - Mogdb / opengauss 用户密码错误,用户被锁
		
# 问题概述xxx客户新上一套opengauss数据库,在测试中程序里用户的密码配置错误,导致用户被锁# 解决方案1.跟oracle 语法一样alter user xxx account unlock ...
 - SQL Server事务、视图和索引
		
废话不多说,直接上干货 14:13:23 事务 概括:事务是一种机制,一个操作序列,包含一组数据库操作命令,并且把所有的命令作为一个整体一起 向系统提交或撤销操作 请求. 事务的特性: 1.原子性 ...
 - spring声明式事务管理总结
		
事务配置 首先在/WEB-INF/applicationContext.xml添加以下内容: <!-- 配置事务管理器 --> <bean id="transactionM ...
 - [NHibernate]事务
		
目录 写在前面 文档与系列文章 事务 增删改查 总结 写在前面 上篇文章介绍了nhibernate的增删改查方法及增加修改操作,这篇文章将介绍nhibernate的事务操作. SQL Server中的 ...
 - 【转】SQL Server中的事务与锁
		
SQL Server中的事务与锁 了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂 ...
 - 存储过程中使用事务,sql server 事务,sql事务
		
一.存储过程中使用事务的简单语法 在存储过程中使用事务时非常重要的,使用数据可以保持数据的关联完整性,在Sql server存储过程中使用事务也很简单,用一个例子来说明它的语法格式: 代码 ...
 - Hibernate配置与事务管理
		
数据库中 @num:代表一个变量 Set @num = 10; Select @num+@num from dual; dual:临时表 得到结果 20 Hibernate:运用数据持久化,使用OR ...
 - 优化MySchool数据库(事务、视图、索引)
		
事务.视图.索引: 事务:当生活逻辑中的“一个步骤”,需要使用多条SQL去完成时,必须使用事务来确保其“完整性“. 视图:简化数据库结构,方便你编写SQL语句(简化SQL语句的编写) 索引:提高“数据 ...
 - 【T_SQL】 基础   事务
		
1.使用 T-SQL 语句来管理事务 开始事务:BEGIN TRANSACTION 提交事务:COMMIT TRANSACTION 回滚(撤销)事务:ROLLBAC ...
 
随机推荐
- 【Azure 应用服务】Azure Durable Function(持久函数)在执行Activity Function时候,因为调用函数名称错误而导致长时间无响应问题
			
问题描述 在使用Azure Durable Function函数,调用函数链模式来调用多个Activity Function. 函数链:https://docs.azure.cn/zh-cn/azur ...
 - Glide源码解析四(解码和转码)
			
本文基于Glide 4.11.0 Glide加载过程有一个解码过程,比如将url加载为inputStream后,要将inputStream解码为Bitmap. 从Glide源码解析一我们大致知道了Gl ...
 - 为什么(++a)+(++a)=14
			
目录 概述 验证 反编译大法 Java 测试 概述 今天有学妹问我,下面这个代码为啥结果是14 int a=5; printf("%d\n",(++a)+(++a)); 我一看,第 ...
 - Jmeter+Influxdb+Grafana搭建
			
背景 在无界面压测情况下,我们需要去额外搭建可视化观测平台.借助于Influxdb+Grafana,我们可以轻松让Jmeter的结果自动写入Influxdb,Influxdb实时存储运行结果,最后由G ...
 - Codeforces Round 829 (Div. 1)A1. Make Nonzero Sum (easy version)(思维找规律)
			
先考虑无解的情况:当n为奇数时无解 相邻的两个元素一定可以变成0 \[a[i] != a[i + 1]时, 分成[i, i], 和[i + 1, i + 1] \] \[a[i] = a[i + 1] ...
 - 对象遍历 Object.keys(obj).forEach(name=> {})
			
Object.keys(props).forEach(name => { watch[name] = function (value) { this.columnConfig.update(na ...
 - stm32 使用多串口通信调试总结
			
前记: stm32使用多个串口通信,这个项目遇到了不少问题,值得反思和深入总结一下. 提纲: 这次的问题,主要有几个部分组成: A 多串口的DMA配置,这个需要注意,尽量不要使用同一个DMA ...
 - TLSR8258方案开发之BLE协议接口代码解析
			
一 前言 这里的代码是在原厂基础上修改了不少.虽然代码复杂了不少,但是逻辑也清晰了不少. 二 广播协议 想要熟悉并修改ble的广播协议和内容,请查阅结构体: static const attribu ...
 - 【stras-one】星念漫画下载器
			
原文链接:[stras-one]星念漫画下载器 - Stars-One的杂货小窝 一款将在线漫画保存到本地的下载工具 应一位蓝奏云批量下载器的用户的要求,实现了这款漫画下载的工具开发, 一直没时间,鸽 ...
 - websocket服务器的创建
			
就这上篇文章的代码,我们会继续实现以下websocket的协议. 为什么要使用websocket呢? 它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平 ...