数据库的安全与保护(下)

三、事务

1、基本概念

事务(transaction)定义:

形成一个逻辑工作单位的数据库操作汇集(集合)。

例如:在关系数据库中,一个事务可以是一条SQL语句、一组SQL 语句或整个程序。

说明:

➢ 是数据库环境中的逻辑工作单位;

➢ 类似于操作系统环境中的"进程"概念;

➢ 一个事务由应用程序中一组操作序列组成,以BEGIN TRANSACTION语句开始,以COMMIT(提交)或ROLLBACK(回滚) 结束。

➢事务和程序是两个概念。一般地讲,一个程序中包含多个 事务。

2、事务的ACID性质

a. 原子性(Atomicity)

一个事务中所有对数据库的操作,是一个不可分割的操作序列。

b. 一致性(Consistency)

一个事务独立执行的结果,将保持数据库的一致性,即数据不 会因事务的执行而遭受破坏。

c. 隔离性(Isolation)

多个事务并发执行时,系统应保证与这些事务先后单独执行时 的结果一样。

d. 持久性(Durability)

一个事务一旦完成全部操作,它对数据库的所有更新应永久性 地反映在数据库中。

2、事务的ACID性质

数据库的访问:

I. read(X):把数据X从数据库中读到内存缓冲区

II. write(X):把数据X从内存缓冲区写回数据库

举例:银行数据库中有一转帐事务Ti,从帐号A转一笔款(¥50) 到帐号B。

其操作如下:

原子性: 事务中所有操作应作为一个整体,不能分割,要么全做,要么全 不做。 如果只修改了A的值而没有修改B的值,就违反了事务的原子性。

一致性: 在事务Ti执行结束后,要求数据库中A的值减50,B的值增50, 即A与B的和不变,此时称数据库处于一致状态。

隔离性: 同时两个事务Ti和Tj对A、B操作,彼此独立,互不干涉。

持久性: 事务的持久性保证事务成功执行后,所有对数据库修改的影响 应长期存在,不能丢失。既使计算机系统的故障导致内存中数 据丢失,但写入磁盘的数据也决不能丢失。

3、事务的写法

Begin transaction

read A

A:=A-s

If A<0 then display "insufficient fund"

Rollback

Else B:=B+s

Display"transfer complete"

Commit

4、事务的状态变迁

在事务开始执行后,立即进入"活动"状态。 在活动状态,事务执行对数据库的读/写操 作。但是"写操作"并不立即写到磁盘上, 很可能暂时存放在系统缓冲区中。

事务的最后一个语句执行之后, 进入"局部提交"状态。事务 执行完毕,但对数据库的修改, 可能还在内存的系统缓冲区中, 事务还没有真正结束。

处于活动状态的事务还没 有执行完最后一个语句就 中止执行,事务进入"失 败"状态。

在局部提交状态,虽然事务的 语句执行结束,但对数据库的 修改可能还没有写到数据库。 此时,如果系统出现故障,事 务将进入"失败"状态。

处于失败状态的事务,可能已 对磁盘中的数据进行了部分修 改。为了保证事务的原子性, 应该撤销该事务对数据库已做 的修改。称为事务的回退。

事务进入异常中止状态,系统可 以重新启动(软硬件故障),或 取消事务(事务逻辑错误)。

事务进入局部提交状态后,并发控制系统 将检查并发事务之间是否存在干扰现象, 通过检查后,系统执行提交操作,把对数 据库的修改全部写到磁盘上。事务成功结 束,进入"提交"状态。

5、事务的并发执行

事务的语句分为两类:

➢ I/O活动 顺序执行

➢ CPU活动 并发执行

定义:事务的执行次序称为"调度"。

多个事务依次执行-》串行调度

利用分时方法同时处理多个事务-》并发调度

例:事务T1从帐号A转¥100到帐号B,事务T2从帐号A转 10%到帐号B。

初始:A=2000 B=1000 串行调度1: 先执行T1,后执行T2 结束:A=1710 B=1290

初始:A=2000 B=1000 串行调度2: 先执行T2,后执行T1 结束:A=1700 B=1300

初始:A=2000 B=1000 并发调度1 结束:A=1710 B=1290  正确的并发调度

初始:A=2000 B=1000 并发调度2 结束:A=1900 B=1300  错误的并发调度

6、并发事务的可串行化

并发调度中,有的可以保持数据 库的一致性,有的不能。

冲突可串行化

设有事务Ti和Tj,其调度为S,S中有两个相邻的语 句Ii和Ij,分别来自Ti和Tj,并对同一数据Q操作。存 在以下可能:

➢Ii=read(Q),Ij=read(Q);

➢ Ii=read(Q),Ij=write(Q);

➢ Ii=write(Q),Ij=read(Q);

➢ Ii=write(Q),Ij=write(Q);

定义 Ii和Ij分别是并发事务Ti和Tj中的read或write 语句,并在并发调度中相邻。当Ii和Ij是对同一数据操 作时,并且至少有一个是write语句,我们称Ii和Ij是 一对"冲突"的语句,否则称为"非冲突"语句。

在调度S中,有一对相邻的语句是"非冲突"的语句,那么它们的先后 次序可以交换,交换后产生的新调度S'与S等价,即产生相同的执行结果。

定义 如果调度S'是从调度S通过交换一系列的非冲突语句得到,那么 称S'和S是一对"冲突等价"的调度。 如果调度S与某个串行调度是"冲突等价",那么称S是"冲突可串 行化"的调度。

7、SQL中的事务定义

SQL没有专门的事务开始语句,每一个对数据库或关系的查 询与操作都包含着一个事务的开始。事务的结束语句是COMMIT或 ROLLBACK。

➢ COMMIT:提交当前事务,并开始一个新的事务;

➢ ROLLBACK:中止当前事务,执行回退操作,开始新事务。

事务的读写类型

➢ READ ONLY 只读型

➢ READ WRITE 读写型

SQL定义:

SET TRANSACTION READ ONLY

SET TRANSACTION READ WRITE

事务的一致性级别

➢ SERIALIZABLE 可串行化

➢ REPEATABLE READ 可重复读写

➢ READ COMMITTED 读提交数据

➢ READ UNCOMMITTED 可以读未提交数据

SQL定义:

SET TRANSACTION ISOLATION SERIALIZABLE

SET TRANSACTION ISOLATION REPEATABLE READ

SET TRANSACTION ISOLATION READ COMMITTED

SET TRANSACTION ISOLATION READ UNCOMMITTED

相关推荐
Leon-Ning Liu3 小时前
Oracle 19c 归档日志挖掘(Log Mining)完全指南
数据库·oracle
看今朝·3 小时前
【Dash框架】Dash回调函数中Output的属性详解
java·前端·dash
eguid_13 小时前
【HLS】Java实现统计HLS的m3u8清单中所有ts切片的视频持续时长
java·音视频·hls·1024程序员节·m3u8·ts时长
洋就在江州4 小时前
jeecgboot 使用apache poi excel导入带图片
java·apache·excel
Scigar4 小时前
Idea的安装以及基础使用
java·intellij-idea·idea
寒山李白4 小时前
IntelliJ IDEA新版下载、安装、创建项目及Maven配置的教程(附安装包等)
java·maven·intellij-idea
刘一说4 小时前
深入浅出 Spring Boot 自动配置(Auto-Configuration):原理、机制与最佳实践
java·spring boot·后端
程序员小假4 小时前
我们来说一说什么是联合索引最左匹配原则?
java·后端