數據庫的事務(Transaction)

在數據庫中,事務(Transaction) 是保證數據操作一致性和完整性的核心機制。它通過一組原子性的操作單元,確保所有操作要么全部成功(提交),要么全部失敗(回滾)。以下是數據庫事務的核心概念和實現細節:


1. 事務的ACID特性

數據庫事務的核心特性由 ACID 定義:

  • 原子性(Atomicity)
    事務中的操作要么全部完成,要么全部不執行。
    示例:轉賬操作中,扣款和入賬必須同時成功或失敗。

  • 一致性(Consistency)
    事務執行后,數據庫必須從一個一致狀態轉換到另一個一致狀態。
    示例:轉賬前后,賬戶總額保持不變。

  • 隔離性(Isolation)
    多個并發事務的執行互不干擾,避免中間狀態被其他事務看到。
    示例:事務A未提交時,事務B無法讀取其修改的數據。

  • 持久性(Durability)
    事務提交后,對數據的修改永久保存,即使系統故障也不丟失。
    示例:事務提交后,數據寫入磁盤,斷電后仍可恢復。


2. 事務的生命周期

數據庫事務的典型流程如下:

BEGIN TRANSACTION;  -- 開啟事務
UPDATE account SET balance = balance - 100 WHERE id = 1;  -- 操作1
UPDATE account SET balance = balance + 100 WHERE id = 2;  -- 操作2
COMMIT;  -- 提交事務(若成功)
-- 或 ROLLBACK;  -- 回滾事務(若失敗)

3. 事務的隔離級別

為了解決并發事務的沖突,數據庫定義了不同隔離級別(從低到高):

隔離級別臟讀不可重復讀幻讀典型場景
READ UNCOMMITTED??????允許讀取未提交數據(極少使用)
READ COMMITTED?????默認級別(如Oracle)
REPEATABLE READ????MySQL InnoDB默認級別
SERIALIZABLE???完全串行化(高一致性,低并發)
  • 臟讀(Dirty Read):讀取到其他事務未提交的數據。
  • 不可重復讀(Non-Repeatable Read):同一事務中多次讀取同一數據結果不一致。
  • 幻讀(Phantom Read):同一事務中多次查詢返回的行數不同(新增/刪除導致)。

4. 數據庫事務的實現機制

(1)鎖機制
  • 共享鎖(Shared Lock, S鎖)
    允許讀取,阻止其他事務獲取排他鎖。
  • 排他鎖(Exclusive Lock, X鎖)
    阻止其他事務獲取任何鎖(用于寫操作)。
(2)多版本并發控制(MVCC)
  • 通過保存數據的多個版本來實現非阻塞讀(如MySQL InnoDB、PostgreSQL)。
  • 讀操作訪問舊版本數據,寫操作生成新版本,避免讀寫沖突。
(3)日志機制
  • Redo Log:記錄事務的物理修改,用于故障恢復。
  • Undo Log:記錄事務的邏輯逆操作,用于回滾和MVCC。

5. 常見數據庫的事務實現

MySQL(InnoDB引擎)
  • 默認隔離級別:REPEATABLE READ(通過MVCC避免幻讀)。
  • 支持行級鎖和間隙鎖(Gap Lock)防止幻讀。
PostgreSQL
  • 默認隔離級別:READ COMMITTED
  • 使用MVCC實現高并發,無鎖讀操作。
Oracle
  • 默認隔離級別:READ COMMITTED
  • 通過撤銷段(Undo Segments)支持一致性讀。

6. 事務的常見問題與優化

(1)長事務
  • 風險:占用鎖資源,導致阻塞和性能下降。
  • 優化:拆分事務,避免長時間持有鎖。
(2)死鎖
  • 原因:多個事務互相等待對方釋放鎖。
  • 解決:數據庫自動檢測并回滾一個事務(如MySQL的innodb_deadlock_detect)。
(3)分布式事務
  • 場景:跨多個數據庫或服務的操作(如銀行跨行轉賬)。
  • 方案
    • 兩階段提交(2PC):協調者統一提交或回滾。
    • Saga模式:通過補償操作回滾已完成的步驟。

7. 事務的最佳實踐

  1. 盡量短小:減少鎖的持有時間。
  2. 合理選擇隔離級別:在一致性和性能間權衡。
  3. 避免跨服務事務:優先使用最終一致性(如消息隊列)。
  4. 監控與日志:關注長事務和死鎖日志。

總結

數據庫事務是保障數據一致性的基石,理解其ACID特性、隔離級別及底層實現機制(鎖、MVCC、日志)對優化應用性能至關重要。在實際開發中,需根據業務場景選擇合適的事務策略,平衡一致性與并發性能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82632.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82632.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82632.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025-05-27 Python深度學習7——損失函數和反向傳播

文章目錄 1 損失函數1.1 L1Loss1.2 MSELoss1.3 CrossEntropyLoss 2 反向傳播 本文環境: Pycharm 2025.1Python 3.12.9Pytorch 2.6.0cu124 1 損失函數 ? 損失函數 (loss function) 是將隨機事件或其有關隨機變量的取值映射為非負實數以表示該隨機事件的"風險&…

python+tkinter實現GUI界面調用即夢AI文生圖片API接口

背景 目前字節跳動公司提供了即夢AI的接口免費試用,但是并發量只有1,不過足夠我們使用了。我這里想做個使用pythontkinter實現的GUI可視化界面客戶端,這樣就不用每次都登錄官方網站去進行文生圖片,當然文生視頻,或者圖…

#git 儲藏庫意外被清空 Error: bad index – Fatal: index file corrupt

問題:通常是由于 Git 的索引文件損壞導致 原因:系統崩潰或斷電、硬盤故障、Git 操作錯誤等 方案:重建索引文件:將當前的索引文件重命名為其他名稱或刪除,比如 index.m,然后命令行重建索引,git…

GitLab 18.0 正式發布,15.0 將不再受技術支持,須升級【二】

GitLab 是一個全球知名的一體化 DevOps 平臺,很多人都通過私有化部署 GitLab 來進行源代碼托管。極狐GitLab 是 GitLab 在中國的發行版,專門為中國程序員服務。可以一鍵式部署極狐GitLab。 學習極狐GitLab 的相關資料: 極狐GitLab 官網極狐…

車載網關策略 --- 車載網關通信故障處理機制深度解析

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 鈍感力的“鈍”,不是木訥、遲鈍,而是直面困境的韌勁和耐力,是面對外界噪音的通透淡然。 生活中有兩種人,一種人格外在意別人的眼光;另一種人無論…

Unity數字人開發筆記

開源工程地址:https://github.com/zhangliwei7758/unity-AI-Chat-Toolkit 先致敬zhangliwei7758,開放這個源碼 一、建立工程 建立Unity工程(UnityAiChat)拖入Unity-AI-Chat-Toolkit.unitypackage打開chatSample工程,可…

Cherry Studio連接配置MCP服務器

之前寫了一篇關于Cherry Studio的文章,不了解的可以先看一下 AI工具——Cherry Studio,搭建滿血DeepSeek R1的AI對話客戶端【硅基流動DeepSeek API】-CSDN博客 最近Cherry Studio更新了一個新功能:MCP服務器 在 v1.2.9 版本中,…

OpenSSH 服務配置與會話保活完全指南

一、/etc/ssh/sshd_config 配置機制 1. 配置文件基礎 文件作用 OpenSSH 服務器 (sshd) 的主配置文件,控制連接、認證、端口轉發等行為。 加載與生效 修改后需重啟服務:sudo systemctl restart sshd # Systemd 系統 sudo service ssh restart # S…

阿里云國際版注冊郵箱格式詳解

“為什么我的阿里云國際版注冊總提示郵箱無效?” 這是許多初次接觸阿里云國際版(Alibaba Cloud International)的用戶常遇到的困惑。隨著全球化進程加速,越來越多的企業選擇阿里云國際版部署海外業務,而注冊環節中郵箱…

【IDEA問題】springboot本地啟動應用報錯:程序包不存在;找不到符號

問題: springboot本地啟動應用報錯: 程序包xxx不存在;找不到符號 解決方案: 1.確保用maven重新導入依賴 2.刪除.idea文件夾 3.invalidate caches里,把能選擇的都勾選上,然后清除緩存重啟 4.再在上方工具欄…

FFmpeg 時間戳回繞處理:保障流媒體時間連續性的核心機制

FFmpeg 時間戳回繞處理:保障流媒體時間連續性的核心機制 一、回繞處理函數 /** * Wrap a given time stamp, if there is an indication for an overflow * * param st stream // 傳入一個指向AVStream結構體的指針,代表流信息 * pa…

【b站計算機拓荒者】【2025】微信小程序開發教程 - chapter3 項目實踐 -1 項目功能描述

1 項目功能描述 # 智慧社區-小程序-1 歡迎頁-加載后端:動態變化-2 首頁-輪播圖:動態-公共欄:動態-信息采集,社區活動,人臉檢測,語音識別,心率檢測,積分商城-3 信息采集頁面-采集人數…

5.27 day 30

知識點回顧: 導入官方庫的三種手段導入自定義庫/模塊的方式導入庫/模塊的核心邏輯:找到根目錄(python解釋器的目錄和終端的目錄不一致) 作業:自己新建幾個不同路徑文件嘗試下如何導入 一、導入官方庫 我們復盤下學習py…

【GitHub Pages】部署指南

vue項目 編輯你的 vite.config.ts 文件,加上 base 路徑,設置為你的 GitHub 倉庫名 import { defineConfig } from vite import vue from vitejs/plugin-vue// 假設你的倉庫是 https://github.com/your-username/my-vue-app export default defineConfi…

遠程控制技術全面解析:找到適合你的最佳方案

背景:遠程控制為何成為企業核心需求? 隨著企業數字化轉型的推進,遠程控制技術已成為異地辦公和運維的關鍵工具。無論是跨國企業需要高效管理全球設備,還是中小型企業追求經濟高效的解決方案,選擇合適的遠程控制技術&a…

觸覺智能RK3506星閃開發板規格書 型號IDO-EVB3506-V1

產品概述 觸覺智能RK3506星閃開發板,型號IDO-EVB3506-V1采用 Rockchip RK3506(三核 Cortex-A7單核Cortex-M0, 主頻最高1.5GHz)設計的評估開發板,專為家電顯控、顯示HMI、手持終端、工業IOT網關、工業控制、PLC等領域而設計。內置…

九級融智臺階與五大要素協同的量子化解析

九級融智臺階與五大要素協同的量子化解析 摘要:本文構建了一個量子力學框架下的九級融智模型,將企業創新過程映射為量子能級躍遷。研究發現五大要素協同態決定系統躍遷概率(P∣?Ψ_m∣H_協同∣Ψ_n?∣^2),當要素協同…

Kotlin學習34-data數據類1

定義如下:與普通類對比學習 //普通類 class NormalClass(val name: String, val age: Int, val sex: Char) //數據類 data class DataClass(val name: String, val age: Int, val sex: Char)對應找到java反編譯的代碼路徑:Tool-->Kotlin-->Show K…

博圖SCL基礎知識-表達式及賦值運算

S7-1200 從 V2.2 版本開始支持 SCL 語言。 語言元素 SCL 除了包含 PLC 的典型元素(例如,輸入、輸出、定時器或存儲器位)外,還包含高級編程語言表達式、賦值運算和運算符。 程序控制語句 SCL 提供了簡便的指令進行程序控制。例…

海思3519V200ARM Linux 下移植 Qt5.8.0

一、移植背景及意義 海思3519V200是一款基于ARM架構的嵌入式芯片,廣泛應用于智能安防、工業控制等領域。在這些應用場景中,對設備的圖形用戶界面(GUI)有著越來越高的要求。Qt5.8.0作為一個功能強大、跨平臺的GUI開發框架,能夠幫助開發者快速開發出美觀、高效的用戶界面。…