MySQL之基礎事務和隔離級別

目錄

引言:

什么是事務?

事務和鎖

mysql數據庫控制臺事務的幾個重要操作指令(transaction.sql)

1、事物操作示意圖:

2.事務的隔離級別?

四種隔離級別:

總結一下隔離指令

1. 查看當前隔離級別??

2.設置隔離級別??

??(1) 設置當前會話(臨時生效)

??(2) 設置全局(需管理員權限)??

3.修改默認級別

3.ACID 特性

1.原子性 (Atomicity)??

??2. 一致性 (Consistency)??

??3. 隔離性 (Isolation)??

??4. 持久性 (Durability)??


??類別????SQL 語句示例????作用??
??DML??INSERT,?UPDATE,?DELETE??操作數據??(增刪改查)
??DDL??CREATE,?ALTER,?DROP??定義數據庫結構??(如表、索引、視圖等)
??DCL??GRANT,?REVOKE??控制訪問權限??
??TCL??COMMIT,?ROLLBACK??管理事務?

引言:

  • 什么是事務?

事務就是用于保證數據的一致性,她由一組相關的dml語句組成,該組的dml語句要么全部成功,要么全部失敗。如:轉賬就必須保證事務的一致性。

比如我這里有兩個指令:

-- 轉賬人
update balance set balance=balance-100 where id = 1--收款人
update balance set balance=balance+100 where id = 2

?如何保證兩條語句同時執行成功?

  • 事務和鎖

當執行操作(dml語句) ,mysql會在表上加鎖,防止其他用戶修改表的數據,這對用戶來說是非常重要的

  • mysql數據庫控制臺事務的幾個重要操作指令(transaction.sql)

1.start transaction --開啟一個事務

2.savepoint 自定義保存點的名稱 --設置保存點

3.rollback ro 自定義保存點名稱 --回退事務

4.rollback --回退全部事務,回到事務開始的時候

5.commit --提交事務,結束事務,刪除該事務的所有保存點,刪除鎖,不能回退,數據生效,其他會話[其他連接]可以查看生效的新數據

1、事物操作示意圖:

類似于git的回滾操作

用戶a在進行事務操作的時候,用戶b在數據庫是查看不到一部分數據的變化的,必須要等到用戶a提交才行,這叫事務隔離,至于是看得見哪一部分的數據得取決于用的隔離級別

還有一種開啟事務的方式:set?autocommit = off

-- 關閉當前會話的自動提交(影響后續所有操作)
SET autocommit = 0;
INSERT INTO orders (product_id) VALUES (101);
-- 必須顯式提交
COMMIT;
-- 恢復自動提交(否則后續操作仍需要手動提交)
SET autocommit = 1;

2.事務的隔離級別?

1.多個連接開啟各自事務操作數據庫中的數據時,數據庫系統要負責隔離操作,以保證連接在獲取數據的準確性

2.如果不考慮隔離性,會導致:臟讀、不可重復讀、幻讀

臟讀:當應一個事務讀取另外一個事務尚未提交的修改時,產生臟讀。就是也可能別人回滾了或者放棄提交了,但是你讀到了。

不可重復讀:同一個查詢在同一個事務中多次進行,由于其他用戶提交的事務所做的修改或者刪除,每次返回不同的結果集,此時發生不可重復讀

幻讀:同一個查詢在同一個事務中多次進行,由于其他用戶提交事務所作的插入操作,每次返回不同的結果集

四種隔離級別:

1.讀未提交 read uncommitted

2.讀已提交 read committed

3.可重復讀 repeatable read

4.可串行化 serializable

測試一下功能:

打開兩個操作臺a和b

?指令1:查詢當前mysql的隔離級別

select @@tx_isolation;
或者
SELECT @@transaction_isolation;

會得到一個可重復讀的隔離級別

指令2:修改一下這個用戶a的隔離級別為讀未提交

set session transaction isolation level read uncommitted;

設置成功?

我們來對比一下:

此時用戶a執行一個語句,還沒有commot,但是用戶b也能看見,這就是臟讀

其他情況也是類似,可以自行下去動手查看

那這些臟讀、不可重復讀、幻讀我們都理解了,那鎖呢?

當用戶a開啟事務之后插入更新了一些數據

那么用戶b持有可串行化的隔離級別,是什么情況:

答案是按回車之后被卡住,這個用戶b會一直等待連接到這個數據庫

這時候就有兩種情況:

1.超時:

2.用戶a提交了,用戶b才出現結果?

總結一下隔離指令

1. 查看當前隔離級別??
-- 查看當前會話的隔離級別
SELECT @@SESSION.transaction_isolation;-- 查看全局隔離級別
SELECT @@GLOBAL.transaction_isolation;
2.設置隔離級別??
??(1) 設置當前會話(臨時生效)
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;  -- 讀未提交
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;    -- 讀已提交
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;    -- 可重復讀(默認)
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;      -- 串行化
??(2) 設置全局(需管理員權限)??
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;  -- 修改全局配置
FLUSH PRIVILEGES;  -- 刷新權限(可選)

3.修改默認級別

3.ACID 特性

原子性 (Atomicity) → 確保操作完整性
一致性 (Consistency) → 確保數據有效性
隔離性 (Isolation) → 確保并發可控性
持久性 (Durability) → 確保結果永久性

1.原子性 (Atomicity)??
  • ??定義??:事務是最小的工作單元,不可再分割。
  • ??核心原則??:事務中的操作??要么全部成功,要么全部失敗回滾??。
  • ??示例??:銀行轉賬中,扣款和收款必須同時成功或同時失敗。

??2. 一致性 (Consistency)??
  • ??定義??:事務執行前后,數據庫必須從一個一致性狀態變換到另一個一致性狀態。
  • ??核心原則??:數據完整性約束(如主鍵、外鍵、唯一約束)不會被破壞。
  • ??示例??:轉賬前后,雙方賬戶總額應保持不變。

??3. 隔離性 (Isolation)??
  • ??定義??:多個并發事務之間相互隔離,一個事務的操作不應影響其他事務。
  • ??核心原則??:通過隔離級別(如?READ COMMITTED)控制事務間的可見性。
  • ??問題規避??:避免臟讀、不可重復讀、幻讀等問題。

??4. 持久性 (Durability)??
  • ??定義??:事務一旦提交,對數據的修改就是永久性的。
  • ??核心原則??:即使系統崩潰,數據也能通過日志恢復。
  • ??實現機制??:依賴事務日志(如 InnoDB 的 redo log)。

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

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

相關文章

學習記錄:DAY29

項目開發日志:技術實踐與成長之路 前言 回顧這幾天的狀態,熱情總是比我想象中更快被消耗完。比起茫然徘徊的小丑,我更希望自己是對著風車沖鋒的瘋子。 今天繼續深入項目的實際業務。 狀態好點的時候,再看自己EMO時寫的東西&…

kotlin Android AccessibilityService 無障礙入門

安卓的無障礙模式可以很好的進行自動化操作以幫助視障人士自動化完成一些任務。 無障礙可以做到,監聽屏幕變化,朗讀文本,定位以及操作控件等。 以下從配置到代碼依次進行無障礙設置與教程。 一、配置 AndroidManifest.xml 無障礙是個服務…

【Vue篇】數據秘語:從watch源碼看響應式宇宙的蝴蝶效應

目錄 引言 一、watch偵聽器(監視器) 1.作用: 2.語法: 3.偵聽器代碼準備 4. 配置項 5.總結 二、翻譯案例-代碼實現 1.需求 2.代碼實現 三、綜合案例——購物車案例 1. 需求 2. 代碼 引言 💬 歡迎討論&#…

WPS中代碼段的識別方法及JS宏實現

在WPS中,文檔的基本結構可以通過對象模型來理解: (1)Document對象:表示整個文檔 (2)Range對象:表示文檔中的一段連續區域,可以是一個字符、一個句子或整個文檔 &#…

el-tree結合el-tree-transfer實現穿梭框里展示樹形數據

參考文章&#xff1a;我把他的彈框單拉出來一個獨立文件作為組件方便使用&#xff0c;遇到一些問題記錄一下。 testComponet.vue <template><div class"per_container"><div class"per_con_left"><div class"per_con_title&q…

Go 后端中雙 token 的實現模板

下面是一個典型的 Go 后端雙 Token 認證機制 實現模板&#xff0c;使用 Gin 框架 JWT Redis&#xff0c;結構清晰、可拓展&#xff0c;適合實戰開發。 項目結構建議 /utils├── jwt.go // Access & Refresh token 的生成和解析├── claims.go // 從請求…

Typescript學習教程,從入門到精通,TypeScript 對象語法知識點及案例代碼(7)

TypeScript 對象語法知識點及案例代碼 TypeScript 是 JavaScript 的超集&#xff0c;提供了靜態類型檢查和其他增強功能。在 TypeScript 中&#xff0c;對象是面向對象編程&#xff08;OOP&#xff09;的基礎。 一、對象概述 在 TypeScript 中&#xff0c;對象是屬性的集合&a…

應用BERT-GCN跨模態情緒分析:貿易緩和與金價波動的AI歸因

本文運用AI量化分析框架&#xff0c;結合市場情緒因子、宏觀經濟指標及技術面信號&#xff0c;對黃金與美元指數的聯動關系進行解析&#xff0c;揭示本輪貴金屬回調的深層驅動因素。 周三&#xff0c;現貨黃金價格單日跌幅達2.1%&#xff0c;盤中觸及3167.94美元/盎司關鍵價位&…

命令行登錄 MySQL 報 Segmentation fault 故障解決

問題描述&#xff1a;對 mysql8.0.35 源碼進行 make&#xff0c;由于一開始因為yum源問題少安裝依賴庫 庫&#xff0c;在鏈接時遇到錯誤 undefined reference to&#xff0c;后來安裝了相關依賴庫&#xff0c;再次 make 成功。于是將 mysqld 啟動&#xff0c;再用 mysql -u roo…

Axure設計數字鄉村可視化大屏:構建鄉村數據全景圖

今天&#xff0c;讓我們一同深入了解由Axure設計的數字鄉村可視化大屏&#xff0c;看看它如何通過精心的布局和多樣化的圖表類型&#xff0c;將鄉村的各類數據以直觀、易懂的方式呈現出來&#xff0c;為鄉村管理者提供有力的數據支持。 原型效果預覽鏈接&#xff1a;Axure數字鄉…

3D個人簡歷網站 4.小島

1.模型素材 在Sketchfab上下載狐貍島模型&#xff0c;然后轉換為素材資源asset&#xff0c;嫌麻煩直接在網盤鏈接下載素材&#xff0c; Fox’s islandshttps://sketchfab.com/3d-models/foxs-islands-163b68e09fcc47618450150be7785907https://gltf.pmnd.rs/ 素材夸克網盤&a…

智能開發工具PhpStorm v2025.1——增強AI輔助編碼功能

PhpStorm是一個輕量級且便捷的PHP IDE&#xff0c;其旨在提高用戶效率&#xff0c;可深刻理解用戶的編碼&#xff0c;提供智能代碼補全&#xff0c;快速導航以及即時錯誤檢查。可隨時幫助用戶對其編碼進行調整&#xff0c;運行單元測試或者提供可視化debug功能。 立即獲取PhpS…

Spark 的運行模式(--master) 和 部署方式(--deploy-mode)

Spark 的 運行模式&#xff08;--master&#xff09; 和 部署方式&#xff08;--deploy-mode&#xff09;&#xff0c;兩者的核心區別在于 資源調度范圍 和 Driver 進程的位置。 一、核心概念對比 維度--master&#xff08;運行模式&#xff09;--deploy-mode&#xff08;部署…

sqli—labs第八關——布爾盲注

一&#xff1a;確定注入類型 按照我們之前的步驟來 輸入 ?id1 and 11-- ?id1 and 12-- 界面正常 第二行界面異常空白 所以注入類型為單引號閉合型 二&#xff1a; 布爾盲注 1.判斷是否使用條件 &#xff08;1&#xff09;&#xff1a;存在注入但不會直接顯示查詢結果 …

ARP 原理總結

&#x1f310; 一、ARP 原理總結 ARP&#xff08;Address Resolution Protocol&#xff09;是用于通過 IP 地址解析 MAC 地址的協議&#xff0c;工作在 鏈路層 與 網絡層之間&#xff08;OSI 模型的第三層與第二層之間&#xff09;。 &#x1f501; ARP通信過程&#xff1a; …

SpringCloud——EureKa

目錄 1.前言 1.微服務拆分及遠程調用 3.EureKa注冊中心 遠程調用的問題 eureka原理 搭建EureKaServer 服務注冊 服務發現 1.前言 分布式架構&#xff1a;根據業務功能對系統進行拆分&#xff0c;每個業務模塊作為獨立項目開發&#xff0c;稱為服務。 優點&#xff1a; 降…

機頂盒刷機筆記

疑難雜癥解決 hitool線刷網口不通tftp超時--》關閉防火墻cm201-2卡刷所有包提示失敗abort install--》找個卡刷包只刷fastboot分區再卡刷就能通過了&#xff08;cm201救磚包 (M8273版子&#xff09;&#xff09; 刷機工具 海兔燒錄工具HiTool-STB-5.3.12工具&#xff0c;需要…

Linux動靜態庫制作與原理

什么是庫 庫是寫好的現有的&#xff0c;成熟的&#xff0c;可以復用的代碼。現實中每個程序都要依賴很多基礎的底層庫&#xff0c;不可能每個人的代碼都從零開始&#xff0c;因此庫的存在意義非同尋常。 本質上來說庫是一種可執行代碼的二進制形式&#xff0c;可以被操作系統…

如何通過小智AI制作會說話的機器人玩具?

一、硬件準備與組裝 1. 核心硬件選擇 主控芯片&#xff1a;選擇支持無線網絡連接、音頻處理和可編程接口的嵌入式開發板 音頻模塊&#xff1a;配備拾音麥克風與小型揚聲器&#xff0c;確保語音輸入/輸出功能 顯示模塊&#xff1a;選擇適配的交互顯示屏用于可視化反饋 擴展模…

如何控制郵件發送頻率避免打擾用戶

一、用戶行為 監測用戶與郵件的互動數據&#xff0c;如打開率、點擊率下滑或退訂申請增多&#xff0c;可能是發送頻率過高的警示信號。利用郵件營銷平臺的分析工具&#xff0c;識別這些指標的變動趨勢&#xff0c;為調整提供依據。 二、行業特性與受眾差異 不同行業用戶對郵…