达梦数据库-事务

一、定义以及作用

定:是数据库处理的单个逻辑单元 ,是一系列的看作一个整体的操作的集合

作:多个用户访问同一块数据时,防止数据异常(脏数据,修改丢失,幻读,不可重复读)

二、事务特性及分类

1、特性

  • 原子性:保证事务包含的一组操作是原子不可分的,即为这些操作是一个整体,对于数据库,要么全做要么全不做
  • 一致性:同一事务状态的数据,不管何时何处,都是一致完整且正确的(数据保证统一)
  • 隔离性:数据库中一个事务的执行不能被其它事务干扰,即隔离;每个事务的执行效果与系统只有该事务的执行效果一样(有点像分时系统的独立性吼,简单的就是1对1)
  • 持久性:事务一旦提交,对于数据的改变是永久性的。

原子性、一致性、隔离性、持久性又被称为ACID.

2、分类

引入:启动与结束事务,对于DM数据库,第一次执行sql语句,隐性地启动一个事务,提交或者是回滚就会显式地结束事务。

如何查看事务?

SELECT * from sys.v$TRX;

关注ID与SEES_ID即可,有值代表事务提交。

查看事务对应的执行代码以及SEES_ID

分类:

事务提交commit

定:提交对数据所做的操作,将这些操作的结果保存到数据库中

事务被提交之前所做操作:

  • 生成回滚记录:记录数据原始值。---万一修改后悔了呢?
  • 在系统的重做日志缓冲区生成重做日志记录,它包含了对数据页和回滚页的修改。可能写入磁盘----类似底片,有个对数据的保护作用,可恢复数据。

注意:写操作(写入缓冲区)既可能发生在事务提交之前,也可能在之后

事务提交之后所做操作:

  • 将更改记录写入日志文件并写入数据文件(磁盘)
  • 释放事务的锁,将事务标记为完成
  • 返回提交成功消息给请求者
类别:
自动提交模式

定:默认模式,除了命令行模式,所有sql语句执行后提交,或者是执行失败回滚;这个模式看不到事务ID,即为执行后立马结束(事务与sql语句,1:1)

查看事务

show autocommit;

on:自动提交模式,off:手动模式

打开

set autocommit on;

关闭

set autocommit off;

手动提交模式

定:明确定义事务的开始与结束,也叫做显式事务。事务的开始在此模式下DISQL连接到服务器的第一条SQL语句 或者事务结束后的第一条语句

隐式提交模式

定:在手动提交模式下,遇到DDL语句,就会自动提交前面的事务,开始一个新的事务执行DDL语句

注:DDL包含这些CREATE,ALTER,TRUNCATE,DROP,GRANT,REVOKE,审计设置语句。

事务回滚(rollback)

定:撤销事务所做的任何更改

分类
自动回滚
  • **事务运行期间连接断开,**异常(关闭窗口),撤销所有修改,释放事务使用资源
  • 系统重新启动后,数据库执行(恢复操作),从日志重做日志读取未写入磁盘的已经提交的事务(重做操作)或者断电时还没来得及提交的事务( 回滚操作)

注:所有的操作看,REDO 日志与UNDO 日志,前者找到要回滚的事务,后者完成具体的回滚操作

物理做逻辑未提交(回滚)

  • 物理做了:事务执行过程中,修改的数据已经写入内存缓存,甚至因 DM8 的缓存策略,部分数据临时刷到了磁盘数据文件
  • 逻辑没生效:这个事务从未执行 COMMIT(比如断电、连接断开、手动终止),数据库不承认这个修改的合法性

物理没做逻辑生效(重做)

  • 逻辑生效(COMMIT)时,DM8 会先把 "修改内容" 写入 REDO 日志并强制刷盘(保证日志不丢)
  • 物理没做(数据在内存缓存)时,重启后 DM8 读 REDO 日志,把日志里的 "修改内容" 重新写入数据文件**(物理补做)**
手动回滚

定:某条sql语句执行失败,可用rollback语句或者是接口函数回滚整个事务。

回滚到保存点

定:部分回滚未提交事务,可以设置多个保存点标记

查看保存点

SELECT * FROM sys.v$trx_savepoint;

声明保存点

savepoint 名称;

回到保存点

ROLLBACK TO a;

回到一个保存点,这个保存点还在,但保存点后面的事务回滚

语句回滚

定:一条sql语句执行过程中发生错误,这条语句就是从未执行,不影响语句之前所做数据修改。

相关推荐
顶点多余7 分钟前
使用C/C++语言链接Mysql详解
数据库·c++·mysql
xiaokangzhe9 分钟前
MySQL 数据库操作
数据库·oracle
发际线还在2 小时前
互联网大厂Java三轮面试全流程实战问答与解析
java·数据库·分布式·面试·并发·系统设计·大厂
小王不爱笑1322 小时前
MyBatis 执行流程源码级深度解析:从 Mapper 接口到 SQL 执行的全链路逻辑
数据库·sql·mybatis
山峰哥3 小时前
SQL优化实战:从索引策略到执行计划的极致突破
数据库·sql·性能优化·编辑器·深度优先
总要冲动一次3 小时前
离线安装 percona-xtrabackup-24
linux·数据库·mysql·centos
lcrml3 小时前
nacos2.3.0 接入pgsql或其他数据库
数据库
阿达_优阅达4 小时前
告别手工对账:xSuite 如何帮助 SAP 企业实现财务全流程自动化?
服务器·数据库·人工智能·自动化·sap·企业数字化转型·xsuite
IvorySQL4 小时前
IvorySQL v5 发布后,我们想听听大家的使用体验
数据库·postgresql·开源
Maverick064 小时前
01- Oracle核心架构:理解数据库如何运转
数据库·oracle·架构