為了維持資料的一致姓,MySQL使用鎖來確保交易的隔離性,鎖又可以分為排他、共享
1.讀鎖
2.被上共享鎖的資料能被讀取,不能被更新
3.讀取、更新兩交易發生在同筆資料,共享鎖會防止讀取前更新資料
1.寫鎖
2.資料的增查刪改只能被一個交易擁有,其他交易必須等其被釋放
A交易開始,隔離層級設定為Read uncommitted,執行但未提交,B交易讀取資料,讀取到A交易後的值,但A交易發生意外回滾復原,這時便會出現A交易後實際值!==B交易讀取值,這被稱為髒讀。
1.A交易開始,更新帳戶值從100扣除到50
USE day14;
START TRANSACTION;
UPDATE bank
SET account=50
WHERE id = 1;
-- 發生意外所以沒有提交,交易失敗
2.B交易開始,讀取到A交易未提交的髒值50
USE day14;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT *
FROM bank
WHERE id = 1
3.A交易失敗,回滾,回復到交易前的值100
ROLLBACK;
Day15-MySQL的併發(Concurrency)-更新丟失Lost Updates、樂觀&悲觀鎖