本文主要包含內容:
(1) 事務的概念與ACID
(2)事務的隔離等級
(3)MySQL中的事務
1. 事務與ACID
理解事務是其它高階概念的基礎。
事務:事務就是一組原子性的SQL查詢,或則說是獨立的執行單元,要麼全部成功,要麼全部失敗,如果失敗了就回滾到事務之前的狀態。
如下來理解資料庫中關於ACID的概念:原子性、一致性、隔離性、持久性。
(1)原子性:事務中的操作是一個不可分割的整體單元,要麼全部都做,要麼全部不做。
(2)一致性:交易執行前後資料庫都必須處於一致性狀態。
(3)隔離性:通常來說,一個事物所做的修改在最終提交之前對其餘交易是不可見的。這裡就涉及到事務的隔離等級的問題了。
(4)持久性:一旦交易提交完成,修改就是永久的,即使伺服器宕機也不會影響到。
為了更好地理解ACID,以下以銀行帳戶轉帳為例進行說明:
-- 开始事务START TRANSACTION; -- 查询支票账户余额+ SELECT balance FROM checking WHERE customer_id = 10233276;+ -- 将支票账户减去200UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276; -- 将余额账户增加200UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276; -- 提交事务更新COMMIT;
原子性:要麼完全提交(10233276的checking餘額減少200,savings 的餘額增加200) ,要嘛完全回滾(兩個表的餘額都不改變)
一致性:這個例子的一致性體現在200元不會因為資料庫系統運行到第3行之後,第4行之前時崩潰而不翼而飛,因為事物還沒有提交。
隔離性:允許在一個事務中的操作語句會與其他事務的語句隔離開,例如事務A運行到第3行之後,第4行之前,此時事務B去查詢checking餘額時,它仍然能夠看到在事務A中被減去的200元(帳戶錢不變),因為事務A和B是彼此隔離的。在事務A提交之前,事務B觀察不到資料的改變。
持久性:這個很好理解,就是交易提交之後修改就是永久的。
事務跟鎖一樣都會需要大量工作,因此你可以根據你自己的需求來決定是否需要事務支持,從而選擇不同的儲存引擎。
2. 交易的隔離級別
SQL定義了四種隔離級別,用來限定交易內哪些資料是可見的。很明顯低階的隔離等級擁有較高的並發性,系統開銷也更加小,但是隨之而來的就是帶來的資料安全性問題。
Read Uncommitted(未提交讀取)
在該隔離級別,所有交易都可以看到其他未提交交易的執行結果。讀取未提交的數據,也稱為髒讀(Dirty Read)。該等級用的很少。
Read Committed(提交讀取)
這是大多數資料庫系統的預設隔離等級(但不是MySQL預設的)。它滿足了隔離的簡單定義:一個交易只能看見已經提交事務所所做的改變,換句話說就是交易提交之前對其餘事務不可見。這種隔離等級也支援不可重複讀取(Nonrepeatable Read),因為相同交易的其他實例在該實例處理其間可能會有新的commit,所以相同select查詢可能會傳回不同結果。
Repeatable Read(可重複讀取)
#這是MySQL的預設交易隔離級別,它確保相同交易的多個實例在並發讀取資料時,會看到同樣的資料行。不過理論上,這會導致另一個棘手的問題:幻讀 (Phantom Read)。簡單的說,幻讀指當使用者讀取某一範圍的資料行時,另一個事務又在該範圍內插入了新行,當使用者再讀取該範圍的資料行時,會發現有新的“幻影” 行。 InnoDB和Falcon儲存引擎透過多版本並發控制(MVCC,Multiversion Concurrency Control)機制解決了這個問題。
Serializable(可串行化)
這是最高的隔離級別,它強制事務都是串行執行的,使之不可能相互衝突,從而解決幻讀問題。換言之,它是在每個讀取的資料行上加上共享鎖定。在這個級別,可能導致大量的超時現象和鎖定競爭。在
MySQL中實作這四個隔離界別可能產生的問題如下:
3. MySQL中的交易
#MySQL中預設的是採取自動提交模式(AutoCommit),也就是說只要不是顯示的開啟一個事務,每個查詢操作都被當作一個事務執行提交的操作。
我們可以透過設定 AUTOCOMMIT 變數來啟動或則停用自動提交模式。
設定1表示啟用AUTOCOMMIT,0表示停用AUTOCOMMIT。
#本文主要包含一下內容:
(1) 事務的概念與ACID
(2)事務的隔離等級
(3)MySQL中的事務
以上是高效能MySQL-詳解交易與隔離級別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

在數據庫優化中,應根據查詢需求選擇索引策略:1.當查詢涉及多個列且條件順序固定時,使用複合索引;2.當查詢涉及多個列但條件順序不固定時,使用多個單列索引。複合索引適用於優化多列查詢,單列索引則適合單列查詢。

要優化MySQL慢查詢,需使用slowquerylog和performance_schema:1.啟用slowquerylog並設置閾值,記錄慢查詢;2.利用performance_schema分析查詢執行細節,找出性能瓶頸並優化。

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

MySQL異步主從復制通過binlog實現數據同步,提升讀性能和高可用性。 1)主服務器記錄變更到binlog;2)從服務器通過I/O線程讀取binlog;3)從服務器的SQL線程應用binlog同步數據。

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL的安裝和基本操作包括:1.下載並安裝MySQL,設置根用戶密碼;2.使用SQL命令創建數據庫和表,如CREATEDATABASE和CREATETABLE;3.執行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.創建索引和存儲過程以優化性能和實現複雜邏輯。通過這些步驟,你可以從零開始構建和管理MySQL數據庫。

InnoDBBufferPool通過將數據和索引頁加載到內存中來提升MySQL數據庫的性能。 1)數據頁加載到BufferPool中,減少磁盤I/O。 2)臟頁被標記並定期刷新到磁盤。 3)LRU算法管理數據頁淘汰。 4)預讀機制提前加載可能需要的數據頁。

MySQL適合初學者使用,因為它安裝簡單、功能強大且易於管理數據。 1.安裝和配置簡單,適用於多種操作系統。 2.支持基本操作如創建數據庫和表、插入、查詢、更新和刪除數據。 3.提供高級功能如JOIN操作和子查詢。 4.可以通過索引、查詢優化和分錶分區來提升性能。 5.支持備份、恢復和安全措施,確保數據的安全和一致性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

Atom編輯器mac版下載
最受歡迎的的開源編輯器