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
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85976.shtml
英文地址,請注明出處:http://en.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;往往存在效率低下、資源浪費等問…