首頁  >  文章  >  資料庫  >  MySQL 幻讀怎麼解決?

MySQL 幻讀怎麼解決?

Guanhui
Guanhui原創
2020-06-18 15:39:153545瀏覽

MySQL 幻讀怎麼解決?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn