达梦数据库-事务

一、定义以及作用

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

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

二、事务特性及分类

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

相关推荐
码农小卡拉几秒前
深入解析Spring Boot文件加载顺序与加载方式
java·数据库·spring boot
怣505 分钟前
MySQL多表连接:全外连接、交叉连接与结果集合并详解
数据库·sql
wjhx26 分钟前
QT中对蓝牙权限的申请,整理一下
java·数据库·qt
冰暮流星37 分钟前
javascript之二重循环练习
开发语言·javascript·数据库
万岳科技系统开发1 小时前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
冉冰学姐1 小时前
SSM智慧社区管理系统jby69(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·管理系统·智慧社区·ssm 框架
杨超越luckly1 小时前
HTML应用指南:利用GET请求获取中国500强企业名单,揭秘企业增长、分化与转型的新常态
前端·数据库·html·可视化·中国500强
Elastic 中国社区官方博客1 小时前
Elasticsearch:Workflows 介绍 - 9.3
大数据·数据库·人工智能·elasticsearch·ai·全文检索
仍然.2 小时前
MYSQL--- 聚合查询,分组查询和联合查询
数据库
一 乐2 小时前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端