数据库系统概念第十二章 事务

2024-08-24 11:18

本文主要是介绍数据库系统概念第十二章 事务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

事务(Transaction)

事务是作为单个逻辑工作单元执行的一系列数据库操作,这些操作可能会修改多个表中的多个元组

事务正常执行的结构是:

begin;
SQL execution 1
SQL execution 2
...
SQL execution N
commit;

begin标志开始一个事务,多个SQL语句就是事务逻辑工作单元,commit(提交)是结束当前事务并提交事务内数据变更,让其生效

数据库一致性在事务上表现的比较特殊,具体来说:事务执行的过程中可以让数据库处于不一致状态,但一旦提交(commit)数据库必须回到一致的状态(一致性是指广义上的一致性,即真实世界的数据一致性,如A和B转帐他们的总账户余额不变等)。

ACID性质

  • Atomicity:原子性,一个事务要么所有操作被执行,要么全部都不被执行
  • Consistency:一致性,独立地看待一个事务,它必须保证数据库一致性
  • Isolation:独立性,多个事务允许并发的执行,但是必须保证事务之间不会互相干扰,并且一个事务执行过程对其他事务应该是透明的
  • Durability:持久性,当事务成功完成时,它对数据库的更改必须持久化

银行转账是介绍事务时最喜欢用的例子,账户A向账户B转账M元,表达成事务(抽象,非SQL,把update分成多步)就是:

read(A)
A = A - M
write(A)
read(B)
B = B + M
write(B)

这个转账过程是银行数据库经常需要完成的业务逻辑,我们可以把这样经常调用的事务封装成存储过程以供频繁调用(见存储过程一章)

ACID性质具体体现在这个存储过程上就是:

  1. A:要么转账过程的6个步骤全被完成要么全部不被完成,若A的账户不足M元,第三步write写失败(完整性约束),必须保证之前的操作对数据库均不产生影响
  2. C:A和B之和必须保证不变
  3. I:其他和A、B相关的并发转账事务或其他事务对当前转账不产生影响
  4. D:一旦A和B这两个账户持有者收到了转账成功的信息,那么该事务必须永久性生效,即使系统故障(权责划分明确,转账无误,即使故障不可恢复也应该由银行系统负责)

事务管理

了解事务管理之前必须了解一个事务在执行过程中可能处于状态:

  • Active:事务初始状态,执行时保持该状态
  • Partially committed:最后一个操作被执行后的状态(还未commit)
  • Failed:发现错误,停止执行
  • Aborted:事务被回滚(rollback)数据库恢复到事务执行前的状态, - Aborted后有两个选择:重新执行(如果事务内部没有逻辑错误)、kill该事务
  • Committed:事务成功执行完成后的状态

事务状态转换关系如下图:

这里写图片描述

从ACID性质以及上面的事务状态关系可以看出,数据库事务管理主要处理两件事情:

  • 错误/失败:事务执行失败(逻辑错误、系统崩溃、断电等等异常)时恢复处理
  • 并发执行:多个事务能够并发执行(并发的意义在于提高CPU和磁盘利用率,提高吞吐率,以及降低平均响应时间),并且防止并发事务间互相影响对数据库一致性的破坏

并发调度

这里写图片描述

冲突可串行化(Conflict Serialisability)

调度不同,事务执行结果也不同。我们必须有一个标准来判断某种调度是否正确。这个标准就是事务串行——先执行事务1的所有指令,再执行事务2的所有指令——后的结果。如果调度结果与串行结果相同,则调度正确;反之则错误。此概念与操作系统中多线程的执行类似。

这里写图片描述

优先图判断是否是冲突可串行化:

  1. 先画出每个 transaction(T1 T2 T3…)
  2. 找到所有的 读写操作,按照先后顺序,将 read—>write, write—>read, write—>write 连起来,都是前指向后,这些读写都是不同 transaction之间,相同的 transaction 内部不管,如果是相同路径的线段重复多条,只画一条。
  3. 如果画完了有环,则是非冲突可串行化,就是有冲突,但是不能串行化的。

这里写图片描述

画完图,拓扑排序后得到
这里写图片描述

这篇关于数据库系统概念第十二章 事务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102324

相关文章

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

【MRI基础】TR 和 TE 时间概念

重复时间 (TR) 磁共振成像 (MRI) 中的 TR(重复时间,repetition time)是施加于同一切片的连续脉冲序列之间的时间间隔。具体而言,TR 是施加一个 RF(射频)脉冲与施加下一个 RF 脉冲之间的持续时间。TR 以毫秒 (ms) 为单位,主要控制后续脉冲之前的纵向弛豫程度(T1 弛豫),使其成为显著影响 MRI 中的图像对比度和信号特性的重要参数。 回声时间 (TE)

Lua 脚本在 Redis 中执行时的原子性以及与redis的事务的区别

在 Redis 中,Lua 脚本具有原子性是因为 Redis 保证在执行脚本时,脚本中的所有操作都会被当作一个不可分割的整体。具体来说,Redis 使用单线程的执行模型来处理命令,因此当 Lua 脚本在 Redis 中执行时,不会有其他命令打断脚本的执行过程。脚本中的所有操作都将连续执行,直到脚本执行完成后,Redis 才会继续处理其他客户端的请求。 Lua 脚本在 Redis 中原子性的原因

计算机网络基础概念 交换机、路由器、网关、TBOX

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、VLAN是什么?二 、交换机三、路由器四、网关五、TBOXTelematics BOX,简称车载T-BOX,车联网系统包含四部分,主机、车载T-BOX、手机APP及后台系统。主机主要用于车内的影音娱乐,以及车辆信息显示;车载T-BOX主要用于和后台系统/手机APP通信,实现手机APP的车辆信息显示与控

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4

【机器学习-一-基础概念篇】

机器学习 定义分类算法 应用 定义 机器学习最早是被Arthur Samuel 提出的一个概念,指计算机无需明确编程即可学习的研究领域。1950年他发明的跳棋程序,这个人机对弈游戏让他的声名鹊起,机器学习这个概念才进入大众的是视线。 在这个跳棋程序里,他编程了一种算法,这个程序与Arthur下了数万次跳棋,计算机逐渐学会了下在哪里有更大的可能会赢得比赛,哪里会输,通过这种方法,最

【吊打面试官系列-Redis面试题】说说 Redis 哈希槽的概念?

大家好,我是锋哥。今天分享关于 【说说 Redis 哈希槽的概念?】面试题,希望对大家有帮助; 说说 Redis 哈希槽的概念? Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽, 集群的每个节点负责一部分 hash 槽。

AI辅助编程里的 Atom Group 的概念和使用

背景 在我们实际的开发当中,一个需求往往会涉及到多个文件修改,而需求也往往有相似性。 举个例子,我经常需要在 auto-coder中需要添加命令行参数,通常是这样的: /coding 添加一个新的命令行参数 --chat_model 默认值为空 实际上这个需求涉及到以下文件列表: /Users/allwefantasy/projects/auto-coder/src/autocoder/auto

读软件设计的要素04概念的关系

1. 概念的关系 1.1. 概念是独立的,彼此间无须相互依赖 1.1.1. 一个概念是应该独立地被理解、设计和实现的 1.1.2. 独立性是概念的简单性和可重用性的关键 1.2. 软件存在依赖性 1.2.1. 不是说一个概念需要依赖另一个概念才能正确运行 1.2.2. 只有当一个概念存在时,包含另一个概念才有意义 1.3. 概念依赖关系图简要概括了软件的概念和概念存在的理