SQL Transactions(事务)、隔离机制

目录

Why Transactions?

Example: Bad Interaction

Transactions

ACID Transactions

COMMIT

ROLLBACK

How the Transaction Log Works

How Data Is Stored 

Example: Interacting Processes

Interleaving of Statements

Example: Strange Interleaving

Fixing the Problem by Using Transactions

Another Problem: Rollback

Isolation Levels


Why Transactions?

  • Database systems are normally being accessed by many users or processes at the same time. Both queries and modifications.

  • Unlike operating systems, which support interaction of processes, a DMBS needs to keep processes from troublesome interactions.(不像操系统一样支持不同进程之间的交互 ,数据库管理系统需要阻止进程之间的有害交互)

Example: Bad Interaction

  • You and your domestic partner each take $100 from different ATM’s at about the same time.

  • The DBMS better make sure one account deduction doesn’t get lost.(数据库管理系统需要保证多进程的交互不会造成数据的丢失)

Compare: An OS allows two people to edit a document at the same time. If both write, one’s changes get lost.

Transactions

  • Transaction = process involving database queries and/or modification.(数据包括了数据修改和数据查询的过程)

  • Normally with some strong properties regarding concurrency.(事务具有四大核心特性AICD)

  • Formed in SQL from single statements or explicit programmer control.

ACID Transactions

  • Atomic : Whole transaction or none is done.(原子性事务要么全部执行要么全部不执行)

  • Consistent : Database constraints preserved.(一致性,数据库约束始终保持)

  • Isolated : It appears to the user as if only one process executes at a time.(隔离性,对于用户来说,同一时间只有一个进程在运行)

  • Durable : Effects of a process survive a crash.(持久性,在系统崩溃后事务依旧存在

Optional: weaker forms of transactions are often supported as well.

COMMIT

  • The SQL statement COMMIT causes a transaction to complete.(commit将会使得事务操作被完成)

  • It’s database modifications are now permanent in the database.(提交之后事务操作对于数据库的修改才能永久的保存保存到数据库中)

ROLLBACK

  • The SQL statement ROLLBACK also causes the transaction to end, but by aborting.(ROLBACK同样是会使得事务结束,但是是强制中断)

  • No effects on the database.(对于数据库没有影响)

  • Failures like division by 0 or a constraint violation can also cause rollback, even if the programmer does not request it.(部分错误出现时,即使程序没有主动要求,也会进行数据回滚

How the Transaction Log Works

  • 应用程序发出修改请求
  • 定位数据页或者读入缓冲池并且修改
  • 修改被记录在磁盘的事务日志上
  • 检查点将事务提交到数据库中

How Data Is Stored 

数据文件和日志文件共同支撑数据库的持久性 

Example: Interacting Processes

  • Assume the usual Sells(bar,beer,price) relation, and suppose that Joe’s Bar sells only Bud for $2.50 and Miller for $3.00.

  • Sally is querying Sells for the highest and lowest price Joe charges.

  • Joe decides to stop selling Bud and Miller, but to sell only Heineken at $3.50.

Sally’s Program

Sally executes the following two SQL statements called (min) and (max) to help us remember what they do.

(max) SELECT MAX(price) FROM Sells WHERE bar = ’Joe’’s Bar’;

(min) SELECT MIN(price) FROM Sells WHERE bar = ’Joe’’s Bar’;

Joe’s Program

At about the same time, Joe executes the following steps: (del) and (ins).

(del) DELETE FROM Sells WHERE bar = ’Joe’’s Bar’;

(ins) INSERT INTO Sells VALUES(’Joe’’s Bar’ , ’Heineken’ , 3.50);

Interleaving of Statements

Although (max) must come before (min), and (del) must come before (ins), there are no other constraints on the order of these statements, unless we group Sally’s and/or Joe’s statements into transactions.

即使我们保证max查询一定在min查询之前,del一定在ins之前,但是除了这些限制,语句的执行顺序可以是任意的,除非是将Sally和Joe的操作进行事务分组

Example: Strange Interleaving

Fixing the Problem by Using Transactions

  • If we group Sally’s statements (max)(min) into one transaction, then she cannot see this inconsistency.

  • She sees Joe’s prices at some fixed time.

  • Either before or after he changes prices, or in the middle, but the MAX and MIN are computed from the same prices. 

如果将两个人的操作分成两组事务来进行,那么在执行max、min操作时,Sally看到的数据就一定是基于同一组数据的结果 

Another Problem: Rollback

  • Suppose Joe executes (del)(ins), not as a transaction, but after executing these statements, thinks better of it and issues a ROLLBACK statement.

  • If Sally executes her statements after (ins) but before the rollback, she sees a value, 3.50, that never existed in the database.

这个现象就是脏读,也就是说:Joe在插入一个3.5数据之后并没有立即commit,Joe反悔了想回滚操作,但是此时Sally执行了查询,查出了3.5,然后回滚继续,就会导致Sally读出了一个数据库中本来就不存在的数据。

Isolation Levels

  • SQL defines four isolation levels = choices about what interactions are allowed by transactions that execute at about the same time.(隔离机制决定了事物之间允许那些交互)

  • Only one level (“serializable”) = ACID transactions.(只有一种隔离机制可串行化满足了ADCI的特性)

  • Each DBMS implements transactions in its own way(每一种数据库管理系统都有自己的方式来实现事物的隔离机制)

隔离级别允许脏读允许不可重复读允许幻读
读未提交(Read Uncommitted)
读已提交(Read Committed)
可重复读(Repeatable Read)
可串行化(Serializable)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/85976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第R9周:阿尔茨海默病诊断(优化特征选择版)

文章目录 1. 导入数据2. 数据处理2.1 患病占比2.2 相关性分析2.3 年龄与患病探究 3. 特征选择4. 构建数据集4.1 数据集划分与标准化4.2 构建加载 5. 构建模型6. 模型训练6.1 构建训练函数6.2 构建测试函数6.3 设置超参数 7. 模型训练8. 模型评估8.1 结果图 8.2 混淆矩阵9. 总结…

OpenLayers 分屏对比(地图联动)

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…

【大模型】大模型数据训练格式

1. SFT(有监督微调) 1.1 数据格式 JSONL(每行一个 JSON 对象)最为流行;也可用 CSV/TSV,但 JSONL 更灵活。字段设计 prompt:用户输入或任务指令(通常以“系统指令&#…

[论文阅读] 人工智能 | 利用负信号蒸馏:用REDI框架提升LLM推理能力

【论文速读】利用负信号蒸馏:用REDI框架提升LLM推理能力 论文信息 arXiv:2505.24850 cs.LG cs.AI cs.CL Harnessing Negative Signals: Reinforcement Distillation from Teacher Data for LLM Reasoning Authors: Shuyao Xu, Cheng Peng, Jiangxuan Long, Weidi…

Cursor 1.0正式推出:全面解析你的AI 编程助手

目录 前言 一、BugBot:你的私人代码审查专家 二、Background Agent:7x24小时在线的云端开发伙伴 三、Jupyter Notebook 深度集成:数据科学家的福音 四、记忆功能 (Memories):让 AI 更懂你的项目 五、MCP 与工具生态&#xf…

QILSTE 精巧电子元件H4-108FO/5M解析

型号:H4-108FO/5M 在电子元件的浩瀚宇宙中,H4-108FO/5M 仿佛一颗散发着独特光芒的恒星,其参数和特性交织成一张错综复杂的网络,既令人困惑又充满惊喜。这款型号的产品,以其 1.60.80.4mm 的微小尺寸,却蕴含…

第2章_Excel_知识点笔记

Excel 知识点总结(第2章) 来自:第2章_Excel_知识点笔记,原笔记 基础操作 状态栏:快速查看计数/求和等数据(右键可配置)。筛选(CtrlShiftL):按条件显示数据…

【学习笔记】单例类模板

【学习笔记】单例类模板 一、单例类模板 以下为一个通用的单例模式框架,这种设计允许其他类通过继承Singleton模板类来轻松实现单例模式,而无需为每个类重复编写单例实现代码。 // 命名空间(Namespace) 和 模板(Tem…

yolo 训练 中间可视化

yolo训练前几个batch&#xff0c;会可视化target: if plots and ni < 33:f save_dir / ftrain_batch{ni}.jpg # filenameplot_images(imgs, targets, paths, f, kpt_labelkpt_label)

【Linux】虚拟机代理,自动化脚本修改~/.bashrc

二选一执行 {echo ""echo "# Cla Verge代理设置 "echo "alias use-proxyexport http_proxy\"socks5h://192.168.88.1:7897\"; export https_proxy\"socks5h://192.168.88.1:7897\""echo "alias use-proxy-httpexport…

JavaScript 原型与原型链:深入理解 __proto__ 和 prototype 的由来与关系

引言 在 JavaScript 的世界中&#xff0c;原型和原型链是理解这门语言面向对象编程&#xff08;OOP&#xff09;机制的核心。不同于传统的基于类的语言如 Java&#xff0c;JavaScript 采用了一种独特的原型继承机制。本文将深入探讨 __proto__ 和 prototype 的由来、关系以及它…

Linux非管理员用户安装python环境

目录 1. 下载2. 解压3. 配置并指定安装路径&#xff08;本地用户目录&#xff09;4. 编译&#xff08;不安装系统目录&#xff09;5. 安装到本地用户目录6. 添加 Python 到环境变量7. 验证安装是否成功 1. 下载 版本根据需要自行指定 cd /tmp wget https://www.python.org/ft…

猎板PCB:建滔PCB板材怎么样?

在电子元器件的精密世界中&#xff0c;PCB板材如同骨骼般支撑着整个产品的性能与寿命。面对市场上琳琅满目的品牌选择&#xff0c;建滔积层板凭借三十余年技术沉淀&#xff0c;逐渐成为行业工程师与采购方口中的“品质代名词”。今天&#xff0c;我们不谈参数堆砌&#xff0c;只…

ONLYOFFICE协作空间3.1.1 企业版 介绍及部署说明:家庭云计算专家

ONLYOFFICE协作空间3.1企业版是一款专为深度集成需求设计的开源解决方案&#xff0c;其核心功能聚焦于安全性与灵活性。该版本支持私有化部署&#xff0c;允许企业将协作空间嵌入自有服务器并实现品牌定制化&#xff0c;满足对数据主权和品牌一致性的严苛要求。 在安全方面&…

接IT方案编写(PPT/WORD)、业务架构设计、投标任务

1、IT 方案编写&#xff08;PPT/WORD&#xff09;​ 定制化方案&#xff1a;根据客户需求&#xff0c;提供涵盖云计算、大数据、人工智能等前沿技术领域的 PPT/WORD 方案编写服务&#xff0c;精准提炼核心价值&#xff0c;呈现专业技术内容。​ 逻辑清晰架构&#xff1a;采用…

前端面试之变量与数据类型

目录 一、声明变量 &#xff08;1&#xff09;let &#xff08;2&#xff09;const &#xff08;3&#xff09;var var、let 和 const 的作用域差异 二、数据类型 &#xff08;1&#xff09;基本类型 undefined和null String 模板字符串拼接&#xff1a; number和b…

python queue

Python中的queue模块提供了多种队列实现&#xff0c;主要用于线程间安全通信。以下是主要用法&#xff1a; 基本队列类型&#xff1a; Queue&#xff1a;先进先出(FIFO)队列LifoQueue&#xff1a;后进先出(LIFO)队列&#xff0c;即栈PriorityQueue&#xff1a;优先级队列 常用方…

Linux驱动:class_create、device_create

udev是什么 动态管理设备文件 传统的 Linux 系统通过静态创建 /dev 目录下的设备文件&#xff08;如早期的 mknod 命令&#xff09;&#xff0c;但现代系统中硬件设备&#xff08;如 USB 设备、存储设备、串口等&#xff09;热插拔频繁&#xff0c;udev 可实时响应设备事件&…

【vLLM 学习】Cpu Offload Lmcache

vLLM 是一款专为大语言模型推理加速而设计的框架&#xff0c;实现了 KV 缓存内存几乎零浪费&#xff0c;解决了内存管理瓶颈问题。 更多 vLLM 中文文档及教程可访问 →https://vllm.hyper.ai/ *在线运行 vLLM 入门教程&#xff1a;零基础分步指南 源码 examples/offline_inf…

基于深度强化学习的Scrapy-Redis分布式爬虫动态调度策略研究

在大数据时代&#xff0c;网络数据的采集与分析变得至关重要&#xff0c;分布式爬虫作为高效获取海量数据的工具&#xff0c;被广泛应用于各类场景。然而&#xff0c;传统的爬虫调度策略在面对复杂多变的网络环境和动态的抓取需求时&#xff0c;往往存在效率低下、资源浪费等问…