一、定义以及作用
定:是数据库处理的单个逻辑单元 ,是一系列的看作一个整体的操作的集合
作:多个用户访问同一块数据时,防止数据异常(脏数据,修改丢失,幻读,不可重复读)
二、事务特性及分类
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语句执行过程中发生错误,这条语句就是从未执行,不影响语句之前所做数据修改。