达梦数据库-事务

一、定义以及作用

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

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

二、事务特性及分类

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

相关推荐
寂寞旅行9 小时前
向量数据库Milvus的使用
数据库·milvus
闻哥9 小时前
Redis事务详解
java·数据库·spring boot·redis·缓存·面试
道亦无名9 小时前
aiPbMgrSendAck
java·网络·数据库
面向对象World12 小时前
正点原子Mini Linux 4.3寸800x480触摸屏gt115x驱动
linux·服务器·数据库
dinga1985102613 小时前
mysql之联合索引
数据库·mysql
微风中的麦穗13 小时前
【SQL Server 2019】企业级数据库系统—数据库SQL Server 2019保姆级详细图文下载安装完全指南
大数据·数据库·sqlserver·云计算·个人开发·运维必备·sqlserver2019
zjttsh14 小时前
MySQL加减间隔时间函数DATE_ADD和DATE_SUB的详解
android·数据库·mysql
顾北1214 小时前
SpringCloud 系列 04:Gateway 断言 / 过滤器 / 限流 一站式落地指南
java·开发语言·数据库
禹凕14 小时前
MYSQL——基础知识(NULL 值处理)
数据库·mysql
码云数智-大飞14 小时前
SQL Server 无法启动?常见原因及详细解决方法指南
数据库