达梦数据库-事务

一、定义以及作用

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

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

二、事务特性及分类

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语句执行过程中发生错误,这条语句就是从未执行,不影响语句之前所做数据修改。

相关推荐
网硕互联的小客服2 小时前
MYSQL数据库和MSSQL数据库有什么区别?分别适用于什么脚本程序?
数据库·mysql·sqlserver
weixin_462446232 小时前
【原创实践】python 获取节假日列表 并保存为excel
数据库·python·excel
RPA 机器人就找八爪鱼3 小时前
RPA 赋能银行数字化转型:四大核心应用场景深度解析
数据库·人工智能·rpa
掂掂三生有幸3 小时前
使用openGauss搭建一个监狱管理系统
数据库
VX:Fegn08953 小时前
计算机毕业设计|基于Java人力资源管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端·课程设计
siriuuus3 小时前
Redis 安装、多实例部署、主从复制及 Cluster 实践
数据库·redis·centos
Polaris_GQ3 小时前
Navicat连接Oracle数据库报错:12514问题
数据库
老华带你飞3 小时前
健身房|基于springboot + vue健身房管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
JIngJaneIL3 小时前
基于Java酒店预约系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot