MySQL 事務與鎖

事務ACID特性

原子性:事務要么同時成功,要么同時失敗,事務的原子性通過undo log日志保證

一致性:業務代碼要拋出報錯,讓數據庫回滾

隔離性:事務并發執行時,他們內部操作不能互相干擾

持久性:事務一旦提交,對數據庫的改變就是永久性的。通過redo log日志保證

隔離性

InnoDB引擎中的隔離機制的通過MySQL的鎖和MVCC機制實現,提供四種隔離級別,越高隔離性越好,分別是讀未提交(臟讀)、讀已提交(不可重復讀)、可重復讀(贓寫)、串行

讀取未提交:所有事務都可以看到其他未提交事務的執行結果。

臟讀:是某一事務A讀取到了事務B修改未提交的數據。

讀以提交?:一個事務只能看見已經提交事務所做的改變。

解決:解決讀未提交事務A修改數據,事務B讀取數據,事務B讀取的數據是原始數據(不是事務A修改后的數據。

不可重復讀:在一個事務內,多次讀取同一個數據,卻返回了不同的結果,有其他事務對這段數據進行了修改并提交。
?

可重讀:事務讀取數據只會讀到訪問數據第一個版本的數據。

解決:事務A多次查看數據中事務B讀取數據提交,數據是最初打開事務看到的數據。

贓寫:事務A查看數據永遠是第一次查看的數據,事務B修改數據+500,事務A修改數據+200,就會覆蓋之前修改的數據。
可重讀帶來的臟寫的解決方案:樂觀鎖,在數據庫中修改

可重讀的實現機制:通過mvvc機制,會記錄當版本的數據。

可串行:事務會等待其他事務執行結束,否則會阻塞。
解決:臟讀、不可重復度、贓寫。

持久性

Buffer Pool內存寫完了,會寫redo log 日志記錄在那個表修改了什么。

即便MySQL掛了,我們還可以根據redo log 對數據進行恢復。

redo log是順序寫的,寫入速度很塊,恢復速度也快。

MySQL的事務ACID特性有哪些?

原子性、一致性、隔離性、持久性

原子性:事務要么同時成功,要么同時失敗,事務的原子性通過undo log日志保證

一致性:業務代碼要拋出報錯,讓數據庫回滾

隔離性:事務并發執行時,他們內部操作不能互相干擾

持久性:事務一旦提交,對數據庫的改變就是永久性的。通過redo log日志保證

InnoDB引擎中的隔離機制有哪些?

讀未提交、讀已提交、可重讀、串行化

InnoDB引擎中的隔離機制是如何實現的?

InnoDB引擎中的隔離機制的通過MySQL的鎖和MVCC機制實現

讀未提交是什么?帶來什么問題?

讀未提交是事務可以讀取到其他事務修改還未提交的數據。

會帶臟讀的問題,讀取到其他事務修改未提交的數據,然后其他事務回滾,就會導致讀取的數據和數據庫不一致。

讀以提交是什么?解決什么問題?帶來什么問題?

讀已提交只能讀到其他事務已提交的數據。

可能會帶來不重復讀問題,讀取幾次間隔,其他多個事務修改提交。

可重讀是什么?解決什么問題?帶來什么問題?

可重讀是多次讀取數據只能讀到數據第一個版本。

解決了讀已提交帶來的不可重讀問題。

可能帶來贓寫問題,多個事務回去數據修改,會覆蓋之前的修改結果。
可重讀可以用樂觀鎖等方式解決。

可串行是什么?解決什么問題?帶來什么問題?

隔離機制可穿行是事務操作數據會等到其他事務操作完成,

解決了臟讀,不可重讀,贓寫問題,但是在高并發的時候會影響性能。

查詢數據需要使用事務嗎?

如果是可重讀事務隔離性,保證所有數據的都是同時性。

對并發性比較高使用讀以提交隔離級別。

傳統公司使用讀以提交隔離級別

為什么要寫先到redo日志中?

redo日志是一個文件是按照磁盤順序寫的,速度快。

磁盤文件idb是多個文件在磁盤的不同位置,實現不了磁盤順序寫。

三大范式

?事務與鎖

事務ACID特性

原子性:事務要么同時成功,要么同時失敗,事務的原子性通過undo log日志保證

一致性:業務代碼要拋出報錯,讓數據庫回滾

隔離性:事務并發執行時,他們內部操作不能互相干擾

持久性:事務一旦提交,對數據庫的改變就是永久性的。通過redo log日志保證

原子性

一致性

隔離性

InnoDB引擎中的隔離機制的通過MySQL的鎖和MVCC機制實現,提供四種隔離級別,越高隔離性越好。

讀未提交:臟讀

讀已提交:不可重復讀

可重復讀:贓寫

串行:

MySQL設置、查看隔離級別?

read-uncommitted
read-committed
repeatable read
serializable-- 如何查看事務隔離
SELECT @@global.transaction_isolation;
-- 設置事務隔離性
set global transaction isolation level 隔離性

讀取未提交

讀取未提交:所有事務都可以看到其他未提交事務的執行結果

帶來的問題:臟讀是某一事務A讀取到了事務B未提交的數據。

臟讀情況:事務A修改數據,事務B讀取數據,事務A回滾數據,則會導致事務B讀取的是臟數據。

讀以提交?

讀以提交?:一個事務只能看見已經提交事務所做的改變。

解決:解決讀未提交事務A修改數據,事務B讀取數據,事務B讀取的數據是原始數據(不是事務A修改后的數據。

帶來的問題:不可重復讀:在一個事務內,多次讀取同一個數據,卻返回了不同的結果。

因為在該事務間隔讀取數據的期間,有其他事務對這段數據進行了修改并提交

可重讀

不可重復讀:在一個事務內,多次讀取同一個數據,卻返回了不同的結果。

因為在該事務間隔讀取數據的期間,有其他事務對這段數據進行了修改并提交

解決:事務A多次查看數據中事務B讀取數據提交,數據是最初打開事務看到的數據。

帶來的問題:事務A查看數據永遠是第一次查看的數據,事務B修改數據+500,事務A修改數據+200,就會覆蓋之前修改的數據。

可重讀的實現機制

可重讀帶來的臟寫的解決方案:樂觀鎖

事務A獲取數據 0,事務B修改數據 +100,事務A修改數據 +200,會覆蓋事物B修改的數據。

BEGIN;
update account set blance=blance+100 where id=1 and version=2;update account set version=2 where id=1 ;
COMMIT;代碼修改
判斷獲取的版本是第一版本才修改。
update account set blance=blance+200 where id=1 and version=1;

可重讀帶來的臟寫的解決方案:在數據庫中修改

在數據庫修改數據獲得最新的數據。

只限于這一張表。

可串行化

-- 事務一
BEGIN;
SELECT * FROM account WHERE id=1;
COMMIT;-- 事務二
BEGIN;
UPDATE  account SET balance=balance+500 WHERE id=1;
COMMIT;

持久性

Buffer Pool內存寫完了,然后會寫redo log,redo log 日志記錄在那個表修改了什么。

即便MySQL掛了,我們還可以根據redo log 對數據進行恢復。

redo log是順序寫的,寫入速度很塊,恢復速度也快。

MySQL的事務ACID特性有哪些?

InnoDB引擎中的隔離機制有哪些?

查詢數據需要使用事務嗎?

如果是可重讀事務隔離性,保證所有數據的都是同時性。

對并發性比較高使用RC隔離級別。

傳統公司使用RR隔離級別

為什么要寫先到redo日志中?

redo日志是按照磁盤順序寫

磁盤文件idb是多個文件在磁盤的不同位置,實現不了磁盤順序寫。

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

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

相關文章

Python 讀取esxi上所有主機的設備信息

(主要是為了統計所有虛擬機的設備名稱和所屬主機) 代碼: from pyVim import connect from pyVmomi import vim import ssldef get_vm_devices(vm):devices []try:if vm.config is not None and hasattr(vm.config, hardware) and hasattr(v…

SpringBoot解決Apache Tomcat輸入驗證錯誤漏洞

Apache Tomcat是美國阿帕奇(Apache)基金會的一款輕量級Web應用服務器。該程序實現了對Servlet和JavaServer Page(JSP)的支持。 Apache Tomcat存在輸入驗證錯誤漏洞,該漏洞源于HTTP/2請求的輸入驗證不正確,會…

postgresql簡單導出數據與手動本地恢復(小型數據庫)

問題 需要每天手動備份postgresql。 步驟 導出數據 /opt/homebrew/opt/postgresql16/bin/pg_dump --file/Users/zhangyalin/backup_sql/<IP地址>_pg-2024_07_15_17_30_15-dump.sql --dbname<數據庫名> --username<用戶名> --host<IP地址> --port54…

Day53:圖論 島嶼數量 島嶼的最大面積

99. 島嶼數量 時間限制&#xff1a;1.000S 空間限制&#xff1a;256MB 題目描述 給定一個由 1&#xff08;陸地&#xff09;和 0&#xff08;水&#xff09;組成的矩陣&#xff0c;你需要計算島嶼的數量。島嶼由水平方向或垂直方向上相鄰的陸地連接而成&#xff0c;并且四周…

低空經濟持續發熱,無人機培訓考證就業市場及前景剖析

隨著科技的不斷進步和社會需求的日益增長&#xff0c;低空經濟已成為全球及我國經濟增長的新引擎。作為低空經濟的重要組成部分&#xff0c;無人機技術因其廣泛的應用領域和顯著的經濟效益&#xff0c;受到了社會各界的廣泛關注。為滿足市場對無人機人才的需求&#xff0c;無人…

深入剖析 Android 開源庫 EventBus 的源碼詳解

文章目錄 前言一、EventBus 簡介EventBus 三要素EventBus 線程模型 二、EventBus 使用1.添加依賴2.EventBus 基本使用2.1 定義事件類2.2 注冊 EventBus2.3 EventBus 發起通知 三、EventBus 源碼詳解1.Subscribe 注解2.注冊事件訂閱方法2.1 EventBus 實例2.2 EventBus 注冊2.2.1…

夢想CAD在線預覽編輯功能

1.最近有個需求&#xff0c;在web系統里進行在線進行CAD預覽和編輯&#xff0c;這里用的是夢想CAD實現此功能&#xff0c;夢想CAD官網文檔 2.CAD預覽&#xff0c;需要需要對CAD文件格式進行轉化&#xff0c;將dwg文件格式轉化為mxweb格式&#xff0c;再進行調用夢想CAD里的打開…

ipynb轉換為pdf、Markdown(.md)

Jupyter Notebook 文件&#xff08;.ipynb&#xff09;可以轉換成多種數據格式&#xff0c;以適應不同的使用場景和需求。以下是幾種常見的轉換格式及其簡潔描述&#xff1a; HTML: Jupyter Notebook可以直接導出為靜態的網頁&#xff08;HTML&#xff09;格式&#xff0c;這樣…

記一次IP數據處理過程,文本(CSV文件)處理,IP解析

個人博客&#xff1a;無奈何楊&#xff08;wnhyang&#xff09; 個人語雀&#xff1a;wnhyang 共享語雀&#xff1a;在線知識共享 Github&#xff1a;wnhyang - Overview 起因 突然接收到XX給的任務&#xff0c;要將一批IP數據處理一下&#xff0c;將IP對應的省市區解析出來…

PHP基礎語法

PHP 腳本在服務器上執行&#xff0c;然后將純 HTML 結果發送回瀏覽器。 基本的 PHP 語法 PHP 腳本可以放在文檔中的任何位置。 PHP 腳本以 <?php 開始&#xff0c;以 ?> 結束&#xff1a; <?php // PHP 代碼 ?> PHP 文件的默認文件擴展名是 .php。 PHP 文…

PHP智云物業管理平臺微信小程序系統源碼

?&#x1f3e0;智云物業管理新紀元&#xff01;微信小程序&#xff0c;讓家園管理更智慧&#x1f4f1; &#x1f3e1;【開篇&#xff1a;智慧生活&#xff0c;從物業開始】&#x1f3e1; 在快節奏的現代生活中&#xff0c;我們追求的不僅僅是家的溫馨&#xff0c;更是生活的…

基于hive數據庫的泰坦尼克號幸存者數據分析

進入 ./beeline -u jdbc:hive2://node2:10000 -n root -p 查詢 SHOW TABLES; 刪除 DROP TABLE IF EXISTS tidanic; 上傳數據 hdfs dfs -put train.csv /user/hive/warehouse/mytrain.db/tidanic 《泰坦尼克號幸存者數據分析》 1、原始數據介紹 泰坦尼克號是當時世界上…

達夢數據庫系列—28. 主備集群高可用測試

目錄 監視器關閉 監視器啟動&#xff0c;Detach備庫 主備正常&#xff0c;手動switchover 主庫故障&#xff0c;自動switchover 主庫故障&#xff0c;手動Takeover 主庫故障&#xff0c;備庫強制takeover 主庫重啟 備庫故障 公網連接異常 主庫私網異常 備庫私網異常…

實現給Nginx的指定網站開啟basic認證——http基本認證

一、問題描述 目前我們配置的網站內容都是沒有限制&#xff0c;可以讓任何人打開瀏覽器都能夠訪問&#xff0c;這樣就會存在一個問題&#xff08;可能會存在一些惡意訪問的用戶進行惡意操作&#xff0c;直接訪問到我們的敏感后臺路徑進行操作&#xff0c;風險就會很大&#xff…

云原生周刊:Score 成為 CNCF 沙箱項目|2024.7.15

開源項目 Trident Trident 是由 NetApp 維護的全面支持的開源項目。它從頭開始設計&#xff0c;旨在通過行業標準接口&#xff08;如容器存儲接口 CSI&#xff09;幫助您滿足容器化應用程序對持久性存儲的需求。 Monokle Monokle 通過提供用于編寫 YAML 清單、驗證策略和管…

淺談微服務

技術方法論&#xff1a;向微服務邁進&#xff1a; 理論&#xff1a;“軟件研發中任何一項技術、方法、架構都不可能是銀彈"—Fred Brooks 哪些場景適合用微服務&#xff0c;呢些不適用&#xff1f;&#xff08;微服務存在哪些理解誤區、應用前提&#xff09; 一些被驗證過…

Why can‘t I access GPT-4 models via API, although GPT-3.5 models work?

題意&#xff1a;為什么我無法通過API訪問GPT-4模型&#xff0c;盡管GPT-3.5模型可以工作&#xff1f; 問題背景&#xff1a; Im able to use the gpt-3.5-turbo-0301 model to access the ChatGPT API, but not any of the gpt-4 models. Here is the code I am using to tes…

【雷豐陽-谷粒商城 】【分布式高級篇-微服務架構篇】【22】【RabbitMQ】

持續學習&持續更新中… 守破離 【雷豐陽-谷粒商城 】【分布式高級篇-微服務架構篇】【22】【RabbitMQ】 Message Queue 消息隊列異步處理應用解耦流量控制 消息中間件概念RabbitMQ概念MessagePublisherExchangeQueueBindingConnectionChannelConsumerVirtual HostBroker圖…

Django prefetch_related()方法

prefetch_related的作用 prefetch_related()是 Django ORM 中用于優化查詢性能的另一個重要方法&#xff0c;尤其在處理多對多&#xff08;ManyToMany&#xff09;關系和反向關系時非常有用。它允許你預加載相關對象&#xff0c;從而減少數據庫查詢次數。 1&#xff0c;創建應…

【香橙派】Orange pi AIpro開發板使用之一鍵部署springboot項目

前言 最近有幸收到一份新款 OrangePi AIpro 開發板&#xff0c;之前手里也搗鼓過一些板子&#xff0c;這次嘗試從零開始部署一個簡單的后端服務。OrangePi AIpro 采用昇騰AI技術路線&#xff0c;具體為4核64位處理器AI處理器&#xff0c;可配16GB內存容量&#xff0c;各種復雜應…