MySQL中關于事務和鎖的常見執行命令整理包括版本區別

MySQL中關于事務的常見執行命令實例整理,并標注了不同版本下的區別(如MySQL 8.0與舊版本的差異):


一、事務相關命令

1. 事務控制
命令描述版本差異
START TRANSACTION;BEGIN;顯式開啟事務通用語法,無版本差異。
COMMIT;提交事務,使更改永久生效通用語法,無版本差異。
ROLLBACK;回滾事務,撤銷未提交的更改通用語法,無版本差異。
SAVEPOINT 保存點名稱;設置事務保存點通用語法,無版本差異。
ROLLBACK TO 保存點名稱;回滾到指定保存點通用語法,無版本差異。
2. 自動提交設置
命令描述版本差異
SHOW VARIABLES LIKE 'autocommit';查看自動提交狀態通用語法,無版本差異。
SET @@autocommit = 0/1;SET autocommit = OFF/ON;開啟/關閉自動提交通用語法,無版本差異。
3. 事務隔離級別
命令描述版本差異
SET SESSION TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE};設置事務隔離級別通用語法,無版本差異。默認為 REPEATABLE READ
4. 示例事務
-- 轉賬事務示例
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

二、鎖相關命令

1. 共享鎖與排他鎖
命令描述版本差異
SELECT ... LOCK IN SHARE MODE;手動獲取共享鎖(允許其他事務讀,但禁止寫)MySQL 8.0之前使用此語法。
SELECT ... FOR SHARE;MySQL 8.0+ 的優化版共享鎖寫法MySQL 8.0+ 新增,替代 LOCK IN SHARE MODE
SELECT ... FOR UPDATE;手動獲取排他鎖(禁止其他事務讀和寫)通用語法,無版本差異。
2. 表級鎖
命令描述版本差異
LOCK TABLES 表名 READ;獲取表級共享鎖(只讀)通用語法,無版本差異。
LOCK TABLES 表名 WRITE;獲取表級排他鎖(獨占寫)通用語法,無版本差異。
UNLOCK TABLES;釋放表鎖通用語法,無版本差異。
3. 全局鎖
命令描述版本差異
FLUSH TABLES WITH READ LOCK;獲取全局讀鎖(全庫備份場景)通用語法,無版本差異。
UNLOCK TABLES;釋放全局鎖通用語法,無版本差異。
4. 特殊鎖類型
命令描述版本差異
SELECT ... FOR UPDATE;行級排他鎖(InnoDB默認行為)通用語法,無版本差異。
SELECT ... FOR UPDATE SKIP LOCKED;跳過被鎖定的行(MySQL 8.0+)MySQL 8.0+ 新增。
SELECT ... FOR UPDATE WAIT n;等待鎖超時(MySQL 8.0+)MySQL 8.0+ 新增,n 為等待秒數。
5. 死鎖檢測
命令描述版本差異
SELECT * FROM information_schema.innodb_lock_waits;查看死鎖信息通用語法,無版本差異。
6. 樂觀鎖
命令描述版本差異
UPDATE 表名 SET version = version + 1 WHERE 條件 AND version = 期望值;樂觀鎖模式(基于版本號)通用語法,無版本差異。

三、版本差異總結

MySQL 8.0 的改進
  1. 共享鎖語法優化

    • 舊版本SELECT ... LOCK IN SHARE MODE;
    • MySQL 8.0+SELECT ... FOR SHARE;(推薦使用)。
  2. 排他鎖擴展功能

    • MySQL 8.0+ 支持 SELECT ... FOR UPDATE SKIP LOCKEDSELECT ... FOR UPDATE WAIT n,提供更靈活的鎖控制。
  3. 自增鎖優化

    • MySQL 8.0+ 使用輕量級互斥量替代傳統表級鎖,提升并發性。
舊版本兼容性
  • MySQL 5.7及以下
    • 必須使用 LOCK IN SHARE MODE 實現共享鎖。
    • 不支持 SKIP LOCKEDWAIT n 等高級鎖功能。
    • 自增鎖(AUTO-INC Lock)為傳統表級鎖,可能影響并發性能。

四、鎖類型與事務隔離級別的關聯

  1. 間隙鎖(Gap Lock)

    • 生效條件:僅在 REPEATABLE READ 隔離級別下生效(默認)。
    • 命令觸發:范圍查詢(如 SELECT ... FOR UPDATE WHERE id BETWEEN 10 AND 20)。
  2. 臨鍵鎖(Next-Key Lock)

    • 作用:防止幻讀(默認在 REPEATABLE READ 下生效)。
    • 觸發場景SELECT ... FOR UPDATEUPDATE 操作。
  3. 插入意向鎖(Insert Intention Lock)

    • 作用:允許多個事務同時插入同一間隙的不同位置。
    • 版本要求:通用語法,無版本差異。

五、鎖查看與調試

命令描述版本差異
SHOW OPEN TABLES WHERE In_use > 0;查看當前被鎖的表通用語法,無版本差異。
SHOW ENGINE INNODB STATUS;查看InnoDB鎖狀態和死鎖信息通用語法,無版本差異。

六、示例場景

場景1:高并發轉賬操作
-- MySQL 8.0+
START TRANSACTION;
SELECT * FROM accounts WHERE id = 1 FOR SHARE; -- 共享鎖
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
場景2:避免幻讀
-- MySQL 8.0+
START TRANSACTION;
SELECT * FROM orders WHERE status = 'pending' FOR UPDATE; -- 臨鍵鎖防止插入新數據
-- 執行業務邏輯
COMMIT;

以上命令和版本差異總結基于MySQL 5.7及8.0的特性,實際使用時需結合具體版本文檔驗證。

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

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

相關文章

PyTorch-Transforms的使用(二)

對圖像進行處理 安裝open cv ctrlP 看用法 ToTensor的使用 常見的Transforms 歸一化的圖片 兩個長度為三的數組,分別表示三個通道的平均值和標準差 Resize() Compose() 合并執行功能,輸入進去一個列表&a…

vscode實用配置

前端開發安裝插件: 1.可以更好看的顯示文件圖標 2.用戶快速打開文件 使用步驟:在html文件下右鍵點擊 open with live server 即可 刷力扣: 安裝這個插件 還需要安裝node.js即可

Day130 | 靈神 | 回溯算法 | 子集型 電話號碼的字母組合

Day130 | 靈神 | 回溯算法 | 子集型 電話號碼的字母組合 17.電話號碼的字母組合 17. 電話號碼的字母組合 - 力扣(LeetCode) 思路: 筆者用index代替i,這里的index其實就是digits數組的下標 按照靈神的回溯三問,那就…

深入理解JavaScript設計模式之閉包與高階函數

前言小序 一場失敗面試 2023年的某一天,一場讓我印象深刻的面試: 面試官: “你了解閉包嗎?請說一下你對閉包的理解。” 我自信滿滿地答道: “閉包就是函數里面套函數,里面的函數可以訪問外部函數的變量。…

使用 Spring Boot 3.3 和 JdbcTemplate 操作 MySQL 數據庫

在現代的 Java 應用開發中,Spring Boot 提供了強大的工具來簡化數據庫操作。JdbcTemplate 是 Spring 提供的一個核心類,用于簡化 JDBC 操作,減少樣板代碼。本文將介紹如何在 Spring Boot 3.3 項目中使用 JdbcTemplate 來操作 MySQL 數據庫&am…

如何做好一份技術文檔?(下篇)

如何做好一份技術文檔?(下篇) 下篇:文檔體驗的極致優化 ——從可用性到愉悅性的跨越 文檔用戶體驗地圖 新手路徑 專家路徑 [安裝] → [配置] → [示例] [API] → [參數] → [源碼] │ ▲ …

Windows 12確認沒了,Win11 重心偏移修Bug

微軟悄然擱置了傳說中的Windows 12開發計劃,轉身將精力投入到Windows 11的持續進化中。今年秋季的主角已經確定——Windows 11 25H2,它將于9月或10月間與我們正式見面。 與去年24H2的大規模更新不同,25H2更像是場精心策劃的“功能解鎖”。微軟…

JavaScript中的正則表達式:文本處理的瑞士軍刀

JavaScript中的正則表達式:文本處理的瑞士軍刀 在編程世界中,正則表達式(Regular Expression,簡稱RegExp)被譽為“文本處理的瑞士軍刀”。它能夠高效地完成字符串匹配、替換、提取和驗證等任務。無論是前端開發中的表…

基于LEAP模型在能源環境發展、碳排放建模預測及分析中實踐應用

在國家“3060”碳達峰碳中和的政策背景下,如何尋求經濟-能源-環境的平衡有效發展是國家、省份、城市及園區等不同級別經濟體的重要課題。根據國家政策、當地能源結構、能源技術發展水平以及相關碳排放指標制定合理有效的低碳能源發展規劃需要以科學準確的能源環境發…

Python爬蟲實戰:研究RoboBrowser庫相關技術

1. 引言 1.1 研究背景與意義 隨著電子商務的快速發展,商品信息呈現爆炸式增長。據 Statista 數據顯示,2025 年全球電子商務銷售額預計將達到 7.4 萬億美元,海量的商品數據蘊含著巨大的商業價值。對于電商企業而言,及時獲取競爭對手的產品信息、價格動態和用戶評價,能夠幫…

JVM垃圾回收器-ZGC

一、概述 ZGC(Z Garbage Collector)是一種高效且可擴展的低延遲垃圾回收器。在垃圾回收過程中,ZGC通過優化算法和硬件支持,將Stop-The-World(STW)時間控制在一毫秒以內,使其成為追求低延遲應用…

區間動態規劃

線性 DP 的一種,簡稱為「區間 DP」。以「區間長度」劃分階段,以兩個坐標(區間的左、右端點)作為狀態的維度。一個狀態通常由被它包含且比它更小的區間狀態轉移而來。 一、概念 間 DP 的主要思想就是:先在小區間內得到…

4. 數據類型

4.1 數據類型分類 分類 數據類型 說明 數值類型 BIT(M) 位類型。M指定位數,默認值1,范圍1 - 64 TINYINT [UNSIGNED] 帶符號的范圍 -128 ~ 127,無符號范圍0 ~ 255,默認有符號 BOOL 使用0和1表示真和假 SMALLINT [UNSIGNED] 帶符號是…

設計模式-2 結構型模式

一、代理模式 1、舉例 海外代購 2、代理基本結構圖 3、靜態代理 1、真實類實現一個接口,代理類也實現這個接口。 2、代理類通過真實對象調用真實類的方法。 4、靜態代理和動態代理的區別 1、靜態代理在編譯時就已經實現了,編譯完成后代理類是一個實際…

vue+element-ui一個頁面有多個子組件組成。子組件里面有各種表單,實現點擊enter實現跳轉到下一個表單元素的功能。

一個父組件里面是有各個子組件的form表單組成的。 我想實現點擊enter。焦點直接跳轉到下一個表單元素。 父組件就是由各個子組件構成 子組件就像下圖一樣的都有個el-form的表單。 enterToTab.js let enterToTab {}; (function() {// 返回隨機數enterToTab.addEnterListener …

Open SSL 3.0相關知識以及源碼流程分析

Open SSL 3.0相關知識以及源碼流程分析 編譯 windows環境編譯1、工具安裝 安裝安裝perl腳本解釋器、安裝nasm匯編器(添加到環境變量)、Visual Studio編譯工具 安裝dmake ppm install dmake # 需要過墻2、開始編譯 # 1、找到Visual Studio命令行編譯工具目錄 或者菜單欄直接…

【Redis】筆記|第5節|Redisson實現高并發分布式鎖核心源碼

一、加鎖流程 1. 核心方法調用鏈 RLock lock redisson.getLock("resource"); lock.lock(); // 阻塞式加鎖? lockInterruptibly()? tryAcquire(-1, leaseTime, unit) // leaseTime-1表示啟用看門狗? tryAcquireAsync()? tryLockInnerAsync() // 執行Lua腳本 2…

基于React + TypeScript構建高度可定制的QR碼生成器

前言 在現代Web應用中,QR碼已成為連接線上線下的重要橋梁。本文將詳細介紹如何使用React TypeScript Vite構建一個功能強大、高度可定制的QR碼生成器,支持背景圖片、文本疊加、HTML模塊、圓角導出等高級功能。 前往試試 項目概述 技術棧 前端框架:…

【MATLAB代碼】制導——三點法,二維平面下的例程|運動目標制導,附完整源代碼

三點法制導是一種導彈制導策略,主要用于確保導彈能夠準確追蹤并擊中移動目標。該方法通過計算導彈、目標和制導站之間的相對位置關系,實現對目標的有效制導。 本文給出MATLAB下的三點法例程,模擬平面上捕獲運動目標的情況訂閱專欄后可直接查看源代碼,粘貼到MATLAB空腳本中即…

Ubuntu22.04 安裝 IsaacSim 4.2.0

1. 從官網下載 IsaacSim 4.2.0 安裝包 https://download.isaacsim.omniverse.nvidia.com/isaac-sim-standalone%404.2.0-rc.18%2Brelease.16044.3b2ed111.gl.linux-x86_64.release.zip 2. 查閱 Workstation Installation 安裝方式 Workstation Installation — Isaac Sim Do…