MySQL 幻讀怎麼解決?
1、MVCC快照,將歷史資料存一份快照,在其交易增加與刪除資料時,保證當前事務來說是不可見的;
多數資料庫都實作了多版本並發控制,而且都是靠保存資料快照來實現的。
以 InnoDB 為例,每一行都冗餘了兩個字斷。一個是行的建立版本,一個是行的刪除(過期)版本。版本號碼隨著每次事務的開啟自增。交易每次取數據的時候都會取創建版本小於目前事務版本的數據,以及過期版本大於目前版本的數據。
普通的 select 就是快照讀。
select * from T where number = 1;
2、「next-key」鎖,將目前資料行與上一條資料和下一資料之間的間隙鎖定,保證此範圍內讀取的資料是一致的。
next-key 鎖定包含兩部分
記錄鎖定(行鎖定)
間隙鎖定
記錄鎖定是加在索引上的鎖,間隙鎖是加在索引之間的。 (思考:如果列上沒有索引會發生什麼事?)
select * from T where number = 1 for update; select * from T where number = 1 lock in share mode; insert update delete
推薦教學:《MySQL教學》
以上是MySQL 幻讀怎麼解決?的詳細內容。更多資訊請關注PHP中文網其他相關文章!