日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

把MySQL中的各种锁及其原理都画出来

發(fā)布時(shí)間:2024/1/23 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 把MySQL中的各种锁及其原理都画出来 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

疫情期間在家工作時(shí),同事使用了 insert into on duplicate key update 語(yǔ)句進(jìn)行插入去重,但是在測(cè)試過(guò)程中發(fā)生了死鎖現(xiàn)象:

ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

由于開發(fā)任務(wù)緊急,只是暫時(shí)規(guī)避了一下,但是對(duì)觸發(fā)死鎖的原因和相關(guān)原理不甚了解,于是這幾天一直在查閱相關(guān)資料,總結(jié)出一個(gè)系列文章供大家參考,本篇是上篇,主要介紹 MySQL 加鎖原理和鎖的不同模式或類型的基本知識(shí)。后續(xù)會(huì)講解常見(jiàn)語(yǔ)句的加鎖情況和通過(guò) MySQL 死鎖日志分析死鎖原因。

由于本篇文章涉及很多 MySQL 的基礎(chǔ)知識(shí),大家可以自行閱讀我之前的 MySQL系列文章 《MySQL探秘》(公眾號(hào)菜單處可進(jìn)入系列文章)中的對(duì)應(yīng)章節(jié)。

表鎖和行鎖

我們首先來(lái)了解一下表鎖和行鎖:表鎖是指對(duì)一整張表加鎖,一般是 DDL 處理時(shí)使用;而行鎖則是鎖定某一行或者某幾行,或者行與行之間的間隙。

表鎖由 MySQL Server 實(shí)現(xiàn),行鎖則是存儲(chǔ)引擎實(shí)現(xiàn),不同的引擎實(shí)現(xiàn)的不同。在 MySQL 的常用引擎中 InnoDB 支持行鎖,而 MyISAM 則只能使用 MySQL Server 提供的表鎖。

?

?

表鎖

表鎖由 MySQL Server 實(shí)現(xiàn),一般在執(zhí)行 DDL 語(yǔ)句時(shí)會(huì)對(duì)整個(gè)表進(jìn)行加鎖,比如說(shuō) ALTER TABLE 等操作。在執(zhí)行 SQL 語(yǔ)句時(shí),也可以明確指定對(duì)某個(gè)表進(jìn)行加鎖。

mysql> lock table user read(write); # 分為讀鎖和寫鎖Query OK, 0 rows affected (0.00 sec)mysql> select * from user where id = 100; # 成功mysql> select * from role where id = 100; # 失敗,未提前獲取該 role的讀表鎖mysql> update user set name = 'Tom' where id = 100; # 失敗,未提前獲得user的寫表鎖mysql> unlock tables; # 顯示釋放表鎖Query OK, 0 rows affected (0.00 sec)

表鎖使用的是一次性鎖技術(shù),也就是說(shuō),在會(huì)話開始的地方使用 lock 命令將后續(xù)需要用到的表都加上鎖,在表釋放前,只能訪問(wèn)這些加鎖的表,不能訪問(wèn)其他表,直到最后通過(guò) unlock tables 釋放所有表鎖。

除了使用 unlock tables 顯示釋放鎖之外,會(huì)話持有其他表鎖時(shí)執(zhí)行l(wèi)ock table 語(yǔ)句會(huì)釋放會(huì)話之前持有的鎖;會(huì)話持有其他表鎖時(shí)執(zhí)行 start transaction 或者 begin 開啟事務(wù)時(shí),也會(huì)釋放之前持有的鎖。

行鎖

不同存儲(chǔ)引擎的行鎖實(shí)現(xiàn)不同,后續(xù)沒(méi)有特別說(shuō)明,則行鎖特指 InnoDB 實(shí)現(xiàn)的行鎖。

在了解 InnoDB 的加鎖原理前,需要對(duì)其存儲(chǔ)結(jié)構(gòu)有一定的了解。InnoDB 是聚簇索引,也就是 B+樹的葉節(jié)點(diǎn)既存儲(chǔ)了主鍵索引也存儲(chǔ)了數(shù)據(jù)行。而 InnoDB 的二級(jí)索引的葉節(jié)點(diǎn)存儲(chǔ)的則是主鍵值,所以通過(guò)二級(jí)索引查詢數(shù)據(jù)時(shí),還需要拿對(duì)應(yīng)的主鍵去聚簇索引中再次進(jìn)行查詢。關(guān)于 InnoDB 和 MyISAM 的索引的詳細(xì)知識(shí)可以閱讀《Mysql探索(一):B+Tree索引》一文。

?

?

下面以兩條 SQL 的執(zhí)行為例,講解一下 InnoDB 對(duì)于單行數(shù)據(jù)的加鎖原理。

update user set age = 10 where id = 49;update user set age = 10 where name = 'Tom';

第一條 SQL 使用主鍵索引來(lái)查詢,則只需要在 id = 49 這個(gè)主鍵索引上加上寫鎖;第二條 SQL 則使用二級(jí)索引來(lái)查詢,則首先在 name = Tom 這個(gè)索引上加寫鎖,然后由于使用 InnoDB 二級(jí)索引還需再次根據(jù)主鍵索引查詢,所以還需要在 id = 49 這個(gè)主鍵索引上加寫鎖,如上圖所示。

也就是說(shuō)使用主鍵索引需要加一把鎖,使用二級(jí)索引需要在二級(jí)索引和主鍵索引上各加一把鎖。

根據(jù)索引對(duì)單行數(shù)據(jù)進(jìn)行更新的加鎖原理了解了,那如果更新操作涉及多個(gè)行呢,比如下面 SQL 的執(zhí)行場(chǎng)景。

update user set age = 10 where id > 49;

上述 SQL 的執(zhí)行過(guò)程如下圖所示。MySQL Server 會(huì)根據(jù) WHERE 條件讀取第一條滿足條件的記錄,然后 InnoDB 引擎會(huì)將第一條記錄返回并加鎖,接著 MySQL Server 發(fā)起更新改行記錄的 UPDATE 請(qǐng)求,更新這條記錄。一條記錄操作完成,再讀取下一條記錄,直至沒(méi)有匹配的記錄為止。

?

?

這種場(chǎng)景下的鎖的釋放較為復(fù)雜,有多種的優(yōu)化方式,我對(duì)這塊暫時(shí)還沒(méi)有了解,還請(qǐng)知道的小伙伴在下方留言解釋。

下面主要依次介紹 InnoDB 中鎖的模式和類型,鎖的類型是指鎖的粒度或者鎖具體加在什么地方;而鎖模式描述的是鎖的兼容性,也就是加的是什么鎖,比如寫鎖或者讀鎖。

內(nèi)容基本來(lái)自于 MySQL 的技術(shù)文檔 innodb-lock 一章,感興趣的同學(xué)可以直接去閱讀原文,原文地址為見(jiàn)文章末尾。

行鎖的模式

鎖的模式有:讀意向鎖,寫意向鎖,讀鎖,寫鎖和自增鎖(auto_inc),下面我們依次來(lái)看。

讀寫鎖

讀鎖,又稱共享鎖(Share locks,簡(jiǎn)稱 S 鎖),加了讀鎖的記錄,所有的事務(wù)都可以讀取,但是不能修改,并且可同時(shí)有多個(gè)事務(wù)對(duì)記錄加讀鎖。

寫鎖,又稱排他鎖(Exclusive locks,簡(jiǎn)稱 X 鎖),或獨(dú)占鎖,對(duì)記錄加了排他鎖之后,只有擁有該鎖的事務(wù)可以讀取和修改,其他事務(wù)都不可以讀取和修改,并且同一時(shí)間只能有一個(gè)事務(wù)加寫鎖。

讀寫意向鎖

由于表鎖和行鎖雖然鎖定范圍不同,但是會(huì)相互沖突。所以當(dāng)你要加表鎖時(shí),勢(shì)必要先遍歷該表的所有記錄,判斷是否加有排他鎖。這種遍歷檢查的方式顯然是一種低效的方式,MySQL 引入了意向鎖,來(lái)檢測(cè)表鎖和行鎖的沖突。

意向鎖也是表級(jí)鎖,也可分為讀意向鎖(IS 鎖)和寫意向鎖(IX 鎖)。當(dāng)事務(wù)要在記錄上加上讀鎖或?qū)戞i時(shí),要首先在表上加上意向鎖。這樣判斷表中是否有記錄加鎖就很簡(jiǎn)單了,只要看下表上是否有意向鎖就行了。

意向鎖之間是不會(huì)產(chǎn)生沖突的,也不和 AUTO_INC 表鎖沖突,它只會(huì)阻塞表級(jí)讀鎖或表級(jí)寫鎖,另外,意向鎖也不會(huì)和行鎖沖突,行鎖只會(huì)和行鎖沖突。

自增鎖

AUTOINC 鎖又叫自增鎖(一般簡(jiǎn)寫成 AI 鎖),是一種表鎖,當(dāng)表中有自增列(AUTOINCREMENT)時(shí)出現(xiàn)。當(dāng)插入表中有自增列時(shí),數(shù)據(jù)庫(kù)需要自動(dòng)生成自增值,它會(huì)先為該表加 AUTOINC 表鎖,阻塞其他事務(wù)的插入操作,這樣保證生成的自增值肯定是唯一的。AUTOINC 鎖具有如下特點(diǎn):

  • AUTO_INC 鎖互不兼容,也就是說(shuō)同一張表同時(shí)只允許有一個(gè)自增鎖;
  • 自增值一旦分配了就會(huì) +1,如果事務(wù)回滾,自增值也不會(huì)減回去,所以自增值可能會(huì)出現(xiàn)中斷的情況。

顯然,AUTOINC 表鎖會(huì)導(dǎo)致并發(fā)插入的效率降低,為了提高插入的并發(fā)性,MySQL 從 5.1.22 版本開始,引入了一種可選的輕量級(jí)鎖(mutex)機(jī)制來(lái)代替 AUTOINC 鎖,可以通過(guò)參數(shù) innodbautoinclockmode 來(lái)靈活控制分配自增值時(shí)的并發(fā)策略。具體可以參考 MySQL 的 AUTOINCREMENT Handling in InnoDB 一文,鏈接在文末。

不同模式鎖的兼容矩陣

下面是各個(gè)表鎖之間的兼容矩陣。

?

?

總結(jié)起來(lái)有下面幾點(diǎn):

  • 意向鎖之間互不沖突;
  • S 鎖只和 S/IS 鎖兼容,和其他鎖都沖突;
  • X 鎖和其他所有鎖都沖突;
  • AI 鎖只和意向鎖兼容;

行鎖的類型

根據(jù)鎖的粒度可以把鎖細(xì)分為表鎖和行鎖,行鎖根據(jù)場(chǎng)景的不同又可以進(jìn)一步細(xì)分,依次為 Next-Key Lock,Gap Lock 間隙鎖,Record Lock 記錄鎖和插入意向 GAP 鎖。

不同的鎖鎖定的位置是不同的,比如說(shuō)記錄鎖只鎖住對(duì)應(yīng)的記錄,而間隙鎖鎖住記錄和記錄之間的間隔,Next-Key Lock 則所屬記錄和記錄之前的間隙。不同類型鎖的鎖定范圍大致如下圖所示。

?

?

下面我們來(lái)依次了解一下不同的類型的鎖。

記錄鎖

記錄鎖是最簡(jiǎn)單的行鎖,并沒(méi)有什么好說(shuō)的。上邊描述 InnoDB 加鎖原理中的鎖就是記錄鎖,只鎖住 id = 49 或者 name = 'Tom' 這一條記錄。

當(dāng) SQL 語(yǔ)句無(wú)法使用索引時(shí),會(huì)進(jìn)行全表掃描,這個(gè)時(shí)候 MySQL 會(huì)給整張表的所有數(shù)據(jù)行加記錄鎖,再由 MySQL Server 層進(jìn)行過(guò)濾。但是,在 MySQL Server 層進(jìn)行過(guò)濾的時(shí)候,如果發(fā)現(xiàn)不滿足 WHERE 條件,會(huì)釋放對(duì)應(yīng)記錄的鎖。這樣做,保證了最后只會(huì)持有滿足條件記錄上的鎖,但是每條記錄的加鎖操作還是不能省略的。

所以更新操作必須要根據(jù)索引進(jìn)行操作,沒(méi)有索引時(shí),不僅會(huì)消耗大量的鎖資源,增加數(shù)據(jù)庫(kù)的開銷,還會(huì)極大的降低了數(shù)據(jù)庫(kù)的并發(fā)性能。

間隙鎖

還是最開始更新用戶年齡的例子,如果 id = 49 這條記錄不存在,這個(gè) SQL 語(yǔ)句還會(huì)加鎖嗎?答案是可能有,這取決于數(shù)據(jù)庫(kù)的隔離級(jí)別。這種情況下,在 RC 隔離級(jí)別不會(huì)加任何鎖,在 RR 隔離級(jí)別會(huì)在 id = 49 前后兩個(gè)索引之間加上間隙鎖。

間隙鎖是一種加在兩個(gè)索引之間的鎖,或者加在第一個(gè)索引之前,或最后一個(gè)索引之后的間隙。這個(gè)間隙可以跨一個(gè)索引記錄,多個(gè)索引記錄,甚至是空的。使用間隙鎖可以防止其他事務(wù)在這個(gè)范圍內(nèi)插入或修改記錄,保證兩次讀取這個(gè)范圍內(nèi)的記錄不會(huì)變,從而不會(huì)出現(xiàn)幻讀現(xiàn)象。

值得注意的是,間隙鎖和間隙鎖之間是互不沖突的,間隙鎖唯一的作用就是為了防止其他事務(wù)的插入,所以加間隙 S 鎖和加間隙 X 鎖沒(méi)有任何區(qū)別。

Next-Key 鎖

Next-key鎖是記錄鎖和間隙鎖的組合,它指的是加在某條記錄以及這條記錄前面間隙上的鎖。假設(shè)一個(gè)索引包含 15、18、20 ,30,49,50 這幾個(gè)值,可能的 Next-key 鎖如下:

(-∞, 15],(15, 18],(18, 20],(20, 30],(30, 49],(49, 50],(50, +∞)

通常我們都用這種左開右閉區(qū)間來(lái)表示 Next-key 鎖,其中,圓括號(hào)表示不包含該記錄,方括號(hào)表示包含該記錄。前面四個(gè)都是 Next-key 鎖,最后一個(gè)為間隙鎖。和間隙鎖一樣,在 RC 隔離級(jí)別下沒(méi)有 Next-key 鎖,只有 RR 隔離級(jí)別才有。還是之前的例子,如果 id 不是主鍵,而是二級(jí)索引,且不是唯一索引,那么這個(gè) SQL 在 RR 隔離級(jí)別下就會(huì)加如下的 Next-key 鎖 (30, 49](49, 50)

此時(shí)如果插入一條 id = 31 的記錄將會(huì)阻塞住。之所以要把 id = 49 前后的間隙都鎖住,仍然是為了解決幻讀問(wèn)題,因?yàn)?id 是非唯一索引,所以 id = 49 可能會(huì)有多條記錄,為了防止再插入一條 id = 49 的記錄。

插入意向鎖

插入意向鎖是一種特殊的間隙鎖(簡(jiǎn)寫成 II GAP)表示插入的意向,只有在 INSERT 的時(shí)候才會(huì)有這個(gè)鎖。注意,這個(gè)鎖雖然也叫意向鎖,但是和上面介紹的表級(jí)意向鎖是兩個(gè)完全不同的概念,不要搞混了。

插入意向鎖和插入意向鎖之間互不沖突,所以可以在同一個(gè)間隙中有多個(gè)事務(wù)同時(shí)插入不同索引的記錄。譬如在上面的例子中,id = 30 和 id = 49 之間如果有兩個(gè)事務(wù)要同時(shí)分別插入 id = 32 和 id = 33 是沒(méi)問(wèn)題的,雖然兩個(gè)事務(wù)都會(huì)在 id = 30 和 id = 50 之間加上插入意向鎖,但是不會(huì)沖突。

插入意向鎖只會(huì)和間隙鎖或 Next-key 鎖沖突,正如上面所說(shuō),間隙鎖唯一的作用就是防止其他事務(wù)插入記錄造成幻讀,正是由于在執(zhí)行 INSERT 語(yǔ)句時(shí)需要加插入意向鎖,而插入意向鎖和間隙鎖沖突,從而阻止了插入操作的執(zhí)行。

不同類型鎖的兼容矩陣

不同類型鎖的兼容下如下圖所示。

?

?

其中,第一行表示已有的鎖,第一列表示要加的鎖。插入意向鎖較為特殊,所以我們先對(duì)插入意向鎖做個(gè)總結(jié),如下:

  • 插入意向鎖不影響其他事務(wù)加其他任何鎖。也就是說(shuō),一個(gè)事務(wù)已經(jīng)獲取了插入意向鎖,對(duì)其他事務(wù)是沒(méi)有任何影響的;
  • 插入意向鎖與間隙鎖和 Next-key 鎖沖突。也就是說(shuō),一個(gè)事務(wù)想要獲取插入意向鎖,如果有其他事務(wù)已經(jīng)加了間隙鎖或 Next-key 鎖,則會(huì)阻塞。

其他類型的鎖的規(guī)則較為簡(jiǎn)單:

  • 間隙鎖不和其他鎖(不包括插入意向鎖)沖突;
  • 記錄鎖和記錄鎖沖突,Next-key 鎖和 Next-key 鎖沖突,記錄鎖和 Next-key 鎖沖突;

常見(jiàn)加鎖場(chǎng)景分析

今天我們就從原理走向?qū)崙?zhàn),分析常見(jiàn) SQL 語(yǔ)句的加鎖場(chǎng)景。了解了這幾種場(chǎng)景,相信小伙伴們也能舉一反三,靈活地分析真實(shí)開發(fā)過(guò)程中遇到的加鎖問(wèn)題。

如下圖所示,數(shù)據(jù)庫(kù)的隔離等級(jí),SQL 語(yǔ)句和當(dāng)前數(shù)據(jù)庫(kù)數(shù)據(jù)會(huì)共同影響該條 SQL 執(zhí)行時(shí)數(shù)據(jù)庫(kù)生成的鎖模式,鎖類型和鎖數(shù)量

?

?

下面,我們會(huì)首先講解一下隔離等級(jí)、不同 SQL 語(yǔ)句 和 當(dāng)前數(shù)據(jù)庫(kù)數(shù)據(jù)對(duì)生成鎖影響的基本規(guī)則,然后再依次具體 SQL 的加鎖場(chǎng)景。

隔離等級(jí)對(duì)加鎖的影響

MySQL 的隔離等級(jí)對(duì)加鎖有影響,所以在分析具體加鎖場(chǎng)景時(shí),首先要確定當(dāng)前的隔離等級(jí)

  • 讀未提交(Read Uncommitted 后續(xù)簡(jiǎn)稱 RU):可以讀到未提交的讀,基本上不會(huì)使用該隔離等級(jí),所以暫時(shí)忽略。
  • 讀已提交(Read Committed 后續(xù)簡(jiǎn)稱 RC):存在幻讀問(wèn)題,對(duì)當(dāng)前讀獲取的數(shù)據(jù)加記錄鎖
  • 可重復(fù)讀(Repeatable Read 后續(xù)簡(jiǎn)稱 RR):不存在幻讀問(wèn)題,對(duì)當(dāng)前讀獲取的數(shù)據(jù)加記錄鎖,同時(shí)對(duì)涉及的范圍加間隙鎖,防止新的數(shù)據(jù)插入,導(dǎo)致幻讀。
  • 序列化(Serializable):從 MVCC 并發(fā)控制退化到基于鎖的并發(fā)控制,不存在快照讀,都是當(dāng)前讀,并發(fā)效率急劇下降,不建議使用。

這里說(shuō)明一下,RC 總是讀取記錄的最新版本,而 RR 是讀取該記錄事務(wù)開始時(shí)的那個(gè)版本,雖然這兩種讀取的版本不同,但是都是快照數(shù)據(jù),并不會(huì)被寫操作阻塞,所以這種讀操作稱為?快照讀(Snapshot Read)

MySQL 還提供了另一種讀取方式叫當(dāng)前讀(Current Read),它讀的不再是數(shù)據(jù)的快照版本,而是數(shù)據(jù)的最新版本,并會(huì)對(duì)數(shù)據(jù)加鎖,根據(jù)語(yǔ)句和加鎖的不同,又分成三種情況:

  • SELECT ... LOCK IN SHARE MODE:加共享(S)鎖
  • SELECT ... FOR UPDATE:加排他(X)鎖
  • INSERT / UPDATE / DELETE:加排他(X)鎖

當(dāng)前讀在 RR 和 RC 兩種隔離級(jí)別下的實(shí)現(xiàn)也是不一樣的:RC 只加記錄鎖,RR 除了加記錄鎖,還會(huì)加間隙鎖,用于解決幻讀問(wèn)題

不同 SQL 語(yǔ)句對(duì)加鎖的影響

不同的 SQL 語(yǔ)句當(dāng)然會(huì)加不同的鎖,總結(jié)起來(lái)主要分為五種情況:

  • SELECT ... 語(yǔ)句正常情況下為快照讀,不加鎖;
  • SELECT ... LOCK IN SHARE MODE 語(yǔ)句為當(dāng)前讀,加 S 鎖;
  • SELECT ... FOR UPDATE 語(yǔ)句為當(dāng)前讀,加 X 鎖;
  • 常見(jiàn)的 DML 語(yǔ)句(如 INSERT、DELETE、UPDATE)為當(dāng)前讀,加 X 鎖;
  • 常見(jiàn)的 DDL 語(yǔ)句(如 ALTER、CREATE 等)加表級(jí)鎖,且這些語(yǔ)句為隱式提交,不能回滾。

其中,當(dāng)前讀的 SQL 語(yǔ)句的 where 從句的不同也會(huì)影響加鎖,包括是否使用索引,索引是否是唯一索引等等。

當(dāng)前數(shù)據(jù)對(duì)加鎖的影響

SQL 語(yǔ)句執(zhí)行時(shí)數(shù)據(jù)庫(kù)中的數(shù)據(jù)也會(huì)對(duì)加鎖產(chǎn)生影響。

比如一條最簡(jiǎn)單的根據(jù)主鍵進(jìn)行更新的 SQL 語(yǔ)句,如果主鍵存在,則只需要對(duì)其加記錄鎖,如果不存在,則需要在加間隙鎖。

至于其他非唯一性索引更新或者插入時(shí)的加鎖也都不同程度的受到現(xiàn)存數(shù)據(jù)的影響,后續(xù)我們會(huì)一一說(shuō)明。

具體場(chǎng)景分析

具體 SQL 場(chǎng)景分析主要借鑒何登成前輩的《MySQL 加鎖處理分析》文章和 aneasystone 的系列文章,在他們的基礎(chǔ)上進(jìn)行了總結(jié)和整理。

我們使用下面這張 book 表作為實(shí)例,其中 id 為主鍵,ISBN(書號(hào))為二級(jí)唯一索引,Author(作者)為二級(jí)非唯一索引,score(評(píng)分)無(wú)索引。

?

?

UPDATE 語(yǔ)句加鎖分析

下面,我們先來(lái)分析 UPDATE 相關(guān) SQL 在使用較為簡(jiǎn)單 where 從句情況下加鎖情況。其中的分析原則也適用于 UPDATE,DELETE 和 SELECT ... FOR UPDATE等當(dāng)前讀的語(yǔ)句。

聚簇索引,查詢命中

聚簇索引就是 InnoDB 存儲(chǔ)引擎下的主鍵索引,具體可參考《MySQL索引》。

下圖展示了使用 UPDATE book SET score = 9.2 WHERE ID = 10 語(yǔ)句命中的情況下在 RC 和 RR 隔離等級(jí)下的加鎖,兩種隔離等級(jí)下沒(méi)有任何區(qū)別,都是對(duì) ID = 10 這個(gè)索引加排他記錄鎖。

?

?

聚簇索引,查詢未命中

下圖展示了 UPDATE book SET score = 9.2 WHERE ID = 16 語(yǔ)句未命中時(shí) RR 隔離級(jí)別下的加鎖情況。

在 RC 隔離等級(jí)下,不需要加鎖;而在 RR 隔離級(jí)別會(huì)在 ID = 16 前后兩個(gè)索引之間加上間隙鎖。

?

?

值得注意的是,間隙鎖和間隙鎖之間是互不沖突的,間隙鎖唯一的作用就是為了防止其他事務(wù)的插入新行,導(dǎo)致幻讀,所以加間隙 S 鎖和加間隙 X 鎖沒(méi)有任何區(qū)別。

二級(jí)唯一索引,查詢命中

下圖展示了 UPDATE book SET score = 9.2 WHERE ISBN = 'N0003' 在 RC 和 RR 隔離等級(jí)下命中時(shí)的加鎖情況。

在 InnoDB 存儲(chǔ)引擎中,二級(jí)索引的葉子節(jié)點(diǎn)保存著主鍵索引的值,然后再拿主鍵索引去獲取真正的數(shù)據(jù)行,所以在這種情況下,二級(jí)索引和主鍵索引都會(huì)加排他記錄鎖。

?

?

二級(jí)唯一索引,查詢未命中

下圖展示了 UPDATE book SET score = 9.2 WHERE ISBN = 'N0008' 語(yǔ)句在 RR 隔離等級(jí)下未命中時(shí)的加鎖情況,RC 隔離等級(jí)下該語(yǔ)句未命中不會(huì)加鎖。

因?yàn)?N0008 大于 N0007,所以要鎖住 (N0007,正無(wú)窮)這段區(qū)間,而 InnoDB 的索引一般都使用 Suprenum Record 和 Infimum Record 來(lái)分別表示記錄的上下邊界。Infimum 是比該頁(yè)中任何記錄都要小的值,而 Supremum 比該頁(yè)中最大的記錄值還要大,這兩條記錄在創(chuàng)建頁(yè)的時(shí)候就有了,并且不會(huì)刪除。

所以,在 N0007 和 Suprenum Record 之間加了間隙鎖。

?

?

為什么不在主鍵上也加 GAP 鎖呢?歡迎留言說(shuō)出你的想法。

二級(jí)非唯一索引,查詢命中

下圖展示了 UPDATE book SET score = 9.2 WHERE Author = 'Tom' 語(yǔ)句在 RC 隔離等級(jí)下命中時(shí)的加鎖情況。

我們可以看到,在 RC 等級(jí)下,二級(jí)唯一索引和二級(jí)非唯一索引的加鎖情況是一致的,都是在涉及的二級(jí)索引和對(duì)應(yīng)的主鍵索引上加上排他記錄鎖。

?

?

但是在 RR 隔離等級(jí)下,加鎖的情況產(chǎn)生了變化,它不僅對(duì)涉及的二級(jí)索引和主鍵索引加了排他記錄鎖,還在非唯一二級(jí)索引上加了三個(gè)間隙鎖,鎖住了兩個(gè) Tom 索引值相關(guān)的三個(gè)范圍。

那為什么唯一索引不需要加間隙鎖呢?間隙鎖的作用是為了解決幻讀,防止其他事務(wù)插入相同索引值的記錄,而唯一索引和主鍵約束都已經(jīng)保證了該索引值肯定只有一條記錄,所以無(wú)需加間隙鎖。

?

?

需要注意的是,上圖雖然畫著 4 個(gè)記錄鎖,三個(gè)間隙鎖,但是實(shí)際上間隙鎖和它右側(cè)的記錄鎖會(huì)合并成 Next-Key 鎖。

所以實(shí)際情況有兩個(gè) Next-Key 鎖,一個(gè)間隙鎖(Tom60,正無(wú)窮)和兩個(gè)記錄鎖。

二級(jí)非唯一索引,查詢未命中

下圖展示了 UPDATE book SET score = 9.2 WHERE Author = 'Sarah' 在 RR 隔離等級(jí)下未命中的加鎖情況,它會(huì)在二級(jí)索引 Rose 和 Tom 之間加間隙鎖。而 RC 隔離等級(jí)下不需要加鎖。

?

?

無(wú)索引

當(dāng) Where 從句的條件并不使用索引時(shí),則會(huì)對(duì)全表進(jìn)行掃描,在 RC 隔離等級(jí)下對(duì)所有的數(shù)據(jù)加排他記錄鎖。在RR 隔離等級(jí)下,除了給記錄加鎖,還會(huì)對(duì)記錄和記錄之間加間隙鎖。和上邊一樣,間隙鎖會(huì)和左側(cè)的記錄鎖合并成 Next-Key 鎖。

下圖就是 UPDATE book SET score = 9.2 WHERE score = 22 語(yǔ)句在兩種隔離等級(jí)下的加鎖情況。

?

?

聚簇索引,范圍查詢

上面介紹的場(chǎng)景都是 where 從句的等值查詢,而范圍查詢的加鎖又是怎么樣的呢?我們慢慢來(lái)看。

下圖是 UPDATE book SET score = 9.2 WHERE ID <= 25 在 RC 和 RR 隔離等級(jí)下的加鎖情況。

RC 場(chǎng)景下與等值查詢類似,只會(huì)在涉及的 ID = 10,ID = 18 和 ID = 25 索引上加排他記錄鎖。

?

?

而在 RR 隔離等級(jí)下則有所不同,它會(huì)加上間隙鎖,和對(duì)應(yīng)的記錄鎖合并稱為 Next-Key 鎖。除此之外,它還會(huì)在(25, 30] 上分別加 Next-Key 鎖。這一點(diǎn)是十分特殊的,具體原因還需要再探究。

二級(jí)索引,范圍查詢

下圖展示了 UPDATE book SET ISBN = N0001 WHERE score <= 7.9 在 RR 級(jí)別下的加鎖情況。

?

?

修改索引值

UPDATE 語(yǔ)句修改索引值的情況可以分開分析,首先 Where 從句的加鎖分析如上文所述,多了一步 Set 部分的加鎖。

下圖展示了 UPDATE book SET Author = 'John' WHERE ID = 10 在 RC 和 RR 隔離等級(jí)下的加鎖情況。除了在主鍵 ID 上進(jìn)行加鎖,還會(huì)對(duì)二級(jí)索引上的 Bob(就值) 和 John(新值) 上進(jìn)行加鎖。

?

?

DELETE 語(yǔ)句加鎖分析

一般來(lái)說(shuō),DELETE 的加鎖和 SELECT FOR UPDATE 或 UPDATE 并沒(méi)有太大的差異。

因?yàn)?#xff0c;在 MySQL 數(shù)據(jù)庫(kù)中,執(zhí)行 DELETE 語(yǔ)句其實(shí)并沒(méi)有直接刪除記錄,而是在記錄上打上一個(gè)刪除標(biāo)記,然后通過(guò)后臺(tái)的一個(gè)叫做 purge 的線程來(lái)清理。從這一點(diǎn)來(lái)看,DELETE 和 UPDATE 確實(shí)是非常相像。事實(shí)上,DELETE 和 UPDATE 的加鎖也幾乎是一樣的。

INSERT 語(yǔ)句加鎖分析

接下來(lái),我們來(lái)看一下 Insert 語(yǔ)句的加鎖情況。

Insert 語(yǔ)句在兩種情況下會(huì)加鎖:

  • 為了防止幻讀,如果記錄之間加有間隙鎖,此時(shí)不能 Insert;
  • 如果 Insert 的記錄和已有記錄造成唯一鍵沖突,此時(shí)不能 Insert;

除了上述情況,Insert 語(yǔ)句的鎖都是隱式鎖。隱式鎖是 InnoDB 實(shí)現(xiàn)的一種延遲加鎖的機(jī)制來(lái)減少加鎖的數(shù)量。

隱式鎖的特點(diǎn)是只有在可能發(fā)生沖突時(shí)才加鎖,減少了鎖的數(shù)量。另外,隱式鎖是針對(duì)被修改的 B+Tree 記錄,因此都是記錄類型的鎖,不可能是間隙鎖或 Next-Key 類型。

具體 Insert 語(yǔ)句的加鎖流程如下:

  • 首先對(duì)插入的間隙加插入意向鎖(Insert Intension Locks)如果該間隙已被加上了間隙鎖或 Next-Key 鎖,則加鎖失敗進(jìn)入等待;如果沒(méi)有,則加鎖成功,表示可以插入;
  • 然后判斷插入記錄是否有唯一鍵,如果有,則進(jìn)行唯一性約束檢查如果不存在相同鍵值,則完成插入如果存在相同鍵值,則判斷該鍵值是否加鎖如果沒(méi)有鎖, 判斷該記錄是否被標(biāo)記為刪除如果標(biāo)記為刪除,說(shuō)明事務(wù)已經(jīng)提交,還沒(méi)來(lái)得及 purge,這時(shí)加 S 鎖等待;如果沒(méi)有標(biāo)記刪除,則報(bào) duplicate key 錯(cuò)誤;如果有鎖,說(shuō)明該記錄正在處理(新增、刪除或更新),且事務(wù)還未提交,加 S 鎖等待;
  • 插入記錄并對(duì)記錄加 X 記錄鎖;

后記

本文中講解的 SQL 語(yǔ)句都是十分簡(jiǎn)單的,當(dāng) SQL 語(yǔ)句包含多個(gè)查詢條件時(shí),加鎖的分析過(guò)程就往往更加復(fù)雜。我們需要使用 MySQL 相關(guān)的工具進(jìn)行分析,并且有時(shí)甚至需要查詢 MySQL 相關(guān)的日志信息來(lái)了解到底語(yǔ)句加了什么鎖或者為什么產(chǎn)生死鎖,下篇文章中我們就主要了解一下這些內(nèi)容,請(qǐng)大家持續(xù)關(guān)注。

總結(jié)

以上是生活随笔為你收集整理的把MySQL中的各种锁及其原理都画出来的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

婷婷丁香色 | 97超碰超碰 | 久热电影 | 一级黄色电影网站 | 精品国产伦一区二区三区观看说明 | 手机成人av在线 | 欧美a视频在线观看 | www.在线观看视频 | 99久久精品国产亚洲 | 亚洲精品99 | 综合网天天 | 精品一区在线 | 在线国产黄色 | 久久午夜国产精品 | 亚洲另类视频在线 | 久久久99精品免费观看app | 国产免费a| 中文字幕成人网 | 色综合久久久久久久久五月 | 亚洲专区视频在线观看 | 天天插天天干天天操 | 中文字幕日韩无 | 婷婷综合电影 | 手机在线视频福利 | 国产一区二区三区黄 | 日韩在线网址 | 国产精品免费一区二区三区 | 久香蕉 | 在线观看麻豆av | 国产一区二区观看 | 在线播放亚洲激情 | 天天拍天天色 | 日本午夜免费福利视频 | 日本黄色免费电影网站 | 久久亚洲免费视频 | 毛片网站免费 | 美女免费视频网站 | 免费午夜av | 国产99中文字幕 | 国产中文字幕视频在线观看 | 国产99久久久国产精品免费看 | 亚洲国产97在线精品一区 | 婷婷精品进入 | 久草在线一免费新视频 | 国产成年免费视频 | www日韩欧美| 激情综合啪 | 日韩欧美国产成人 | 香蕉视频在线播放 | 狠狠伊人 | 久久国产品 | 精品久久网 | 婷婷在线精品视频 | 九九在线国产视频 | 人人澡人 | 一区二区三区四区不卡 | 久久久国产日韩 | 国产在线日本 | 亚洲专区欧美 | 成年人黄色免费网站 | 一区二区三区动漫 | 国内精品视频一区二区三区八戒 | 五月开心综合 | 久久视频6| 欧美精品中文在线免费观看 | 国产 日韩 欧美 中文 在线播放 | 欧美一区免费观看 | 97在线观视频免费观看 | 九九视频在线播放 | 91精品视频网站 | av中文资源在线 | 精品在线观看视频 | 在线观看免费日韩 | 国产精品视频999 | 久久97精品 | 午夜精品久久一牛影视 | 日本婷婷色 | 日韩在线电影 | 日韩av电影网站在线观看 | 99精彩视频在线观看免费 | 日本精品在线看 | 国产视频在| 国产亚州av | 又黄又爽又无遮挡免费的网站 | av网站在线观看播放 | 美女黄网久久 | 999久久久 | 99爱精品视频 | 欧美成人精品xxx | 国产一级视频在线免费观看 | 欧美福利视频 | 久草视频在线免费播放 | 国产午夜在线观看视频 | 91视频91自拍 | 婷婷五月在线视频 | 色国产精品 | 国产精品一区在线观看你懂的 | 亚洲精品自拍视频在线观看 | 福利视频一区二区 | 在线看片成人 | 天天插天天干天天操 | 成人黄色免费观看 | 在线免费av播放 | 国产在线久草 | 久久免费国产精品1 | www.夜夜爱 | 精品在线视频一区二区三区 | 一区二区三区免费在线 | 91在线免费视频 | 97**国产露脸精品国产 | 欧美日韩二区在线 | 五月花激情 | 日韩在线视频免费看 | 九九在线精品视频 | 国产四虎影院 | 色 中文字幕 | 国产精品s色 | 色综合天天狠天天透天天伊人 | 色吊丝av中文字幕 | 最近免费中文字幕大全高清10 | 欧美另类v| 久久久不卡影院 | 国产一二区在线观看 | 黄色免费在线看 | 深爱激情开心 | 日韩av影视| 亚洲一区欧美精品 | 日日爽天天操 | 国产真实在线 | 久久久久久高潮国产精品视 | 国产黄av| 精品国产亚洲日本 | 日本黄色免费在线 | 久久艹国产视频 | japanese黑人亚洲人4k | 中文字幕二区在线观看 | 国产视频第二页 | 日本精品中文字幕 | 久要激情网 | 射射色| 丁香国产视频 | 亚洲精品久久激情国产片 | 91九色丨porny丨丰满6 | 五月天丁香 | 91视频xxxx| 最新影院 | 四虎成人精品在永久免费 | 国产福利免费在线观看 | 欧美日本三级 | 97在线观看免费高清完整版在线观看 | 黄影院| 久久国产精品99久久人人澡 | av片一区 | 91超国产 | 国产黄在线观看 | 亚洲精品久久久久久国 | 中文字幕资源网 国产 | 激情综合网婷婷 | 成人在线视频免费看 | 超碰999| 九九热只有精品 | 亚洲欧美日韩国产精品一区午夜 | 六月丁香久久 | 欧美一区二区在线刺激视频 | 激情视频二区 | av福利在线免费观看 | 久久另类视频 | 蜜臀91丨九色丨蝌蚪老版 | 久草免费在线视频 | 四虎在线视频免费观看 | 狠狠干婷婷 | 福利二区视频 | 国产精品成人av电影 | 公与妇乱理三级xxx 在线观看视频在线观看 | 一区在线播放 | 日韩视频中文字幕在线观看 | 五月天电影免费在线观看一区 | 日韩有码中文字幕在线 | 免费美女久久99 | 久久观看免费视频 | 国产成人av电影在线观看 | 久久99热这里只有精品国产 | 999亚洲国产996395 | 波多野结衣一区三区 | 欧美一二三专区 | 久久久久北条麻妃免费看 | 亚洲国产精品成人综合 | 27xxoo无遮挡动态视频 | 奇米先锋 | 久久国产热视频 | 久99久视频 | 福利区在线观看 | 国内久久精品视频 | a视频免费 | 亚洲精品成人 | 特级黄色视频毛片 | 97精品超碰一区二区三区 | 五月天婷婷免费视频 | а中文在线天堂 | 国产剧情一区二区在线观看 | 国产成人黄色在线 | 亚洲成人网在线 | 天天综合五月天 | 亚洲综合在线观看视频 | 精品主播网红福利资源观看 | 久草网在线视频 | 欧美成人基地 | 国精产品一二三线999 | 日韩精品一区二区三区丰满 | 91精品国自产在线偷拍蜜桃 | 久久久黄色免费网站 | 视频在线日韩 | 亚洲精品日韩一区二区电影 | 久精品视频免费观看2 | 国产99久久久国产精品免费看 | 国产日产精品久久久久快鸭 | 欧美在线观看视频 | 深爱激情亚洲 | 美女国产精品 | 国产不卡视频在线 | 日韩精品在线视频免费观看 | 精品一二三四视频 | 香蕉网站在线观看 | 日韩国产欧美在线视频 | 亚洲天天干| 天天爽天天爽 | 欧美视频xxx | 一级黄色片毛片 | 免费av片在线 | 久久精品五月 | 婷婷国产精品 | 国产在线自 | 亚洲视频www | 国产伦理久久精品久久久久_ | 国产在线播放观看 | 久久久久久免费毛片精品 | 8x成人在线 | 欧美巨大荫蒂茸毛毛人妖 | 日批视频 | 国产精品成人一区 | 婷婷激情影院 | 蜜臀av免费一区二区三区 | 欧美日韩三级 | 精品久久久亚洲 | 国产精品视频久久久 | 国内毛片毛片 | 91成人天堂久久成人 | 国产视频 亚洲精品 | 91片黄在线观看 | 国产午夜一级毛片 | 人人爽人人爽人人爽 | 亚洲五月六月 | 亚洲婷婷在线视频 | 在线观看免费福利 | 中国黄色一级大片 | av一级在线 | 欧美日韩性 | 国产一级片免费观看 | 国产探花视频在线播放 | 狠狠干2018 | 色综合天天天天做夜夜夜夜做 | 国产亚洲在线观看 | 亚洲成人av一区二区 | 色婷婷国产在线 | 最新日韩视频在线观看 | 日本精品一 | 视频在线一区二区三区 | 97超碰精品 | 欧美日本高清视频 | 国产特级毛片 | 天操夜夜操 | 欧美日本啪啪无遮挡网站 | 免费a网| 999国产 | 亚洲激色| 美国三级黄色大片 | 日本久久99| 夜夜夜夜夜夜操 | v片在线看 | 天天操天天操一操 | 天天色天天操天天爽 | 免费观看久久久 | 人人看看人人 | 国产成人99av超碰超爽 | 韩国精品视频在线观看 | 欧美一级看片 | 久久免费精品一区二区三区 | 久久高清免费观看 | 国产一级免费av | 天堂av在线网址 | 成人四虎 | 日韩成人精品在线观看 | 天天色官网 | 久久久久色 | 丁香av | 激情综合网在线观看 | 叶爱av在线| 成人全视频免费观看在线看 | 91视频免费视频 | 国产亚洲精品久久 | 久久综合九色综合欧美就去吻 | a黄色片在线观看 | 亚洲自拍偷拍色图 | 国产色道| 99国产免费网址 | 在线视频1卡二卡三卡 | 欧美怡红院视频 | 精品视频网站 | 天天躁日日躁狠狠躁av麻豆 | 国产精品a久久久久 | 欧美一级片在线免费观看 | 五月婷婷一区 | 五月色婷 | 夜夜夜夜夜夜操 | 免费看污网站 | 久久久国产精品成人免费 | 九九热只有精品 | av电影久久| 日韩中文字幕网站 | 青春草免费在线视频 | 99久久精品网 | 免费h在线观看 | 久久精品久久综合 | www.综合网.com | 992tv在线观看 | 日韩欧美电影在线 | 日韩欧美极品 | 96精品视频 | 成年人视频在线免费观看 | 国产一区在线看 | 黄色大片免费网站 | 国产涩涩在线观看 | 国产91精品一区二区麻豆亚洲 | 日韩r级在线 | 成人黄色毛片 | 九九久久精品视频 | 久久久久亚洲a | 久久久国产精品久久久 | 国产精品k频道 | 国产999精品久久久影片官网 | 精品一区二区免费在线观看 | 欧美a级成人淫片免费看 | 久久久亚洲精品 | 国产精品精品国产色婷婷 | 色视频在线观看免费 | 成人免费在线视频 | 亚洲国产无 | 日本精品va在线观看 | 91麻豆免费看 | 91porny九色在线播放 | 五月天婷婷综合 | 在线观看黄av | 最新中文字幕视频 | 成人免费ⅴa| 国产精品资源网 | 99久久99热这里只有精品 | 视频精品一区二区三区 | 一级黄色大片 | 久久艹在线 | 亚洲成人av一区 | 狠狠五月婷婷 | 亚洲欧美视频在线播放 | 狠狠干狠狠艹 | 欧美日韩一区二区视频在线观看 | 91av在线播放视频 | 人人爽久久涩噜噜噜网站 | 国产国语在线 | 福利在线看片 | 欧美尹人 | 久久国产精品99久久久久 | 天天射天天干天天 | 97看片| 精品国产伦一区二区三区观看说明 | 涩涩伊人 | 国产视频一区在线 | 色婷婷久久一区二区 | 国产精品久久嫩一区二区免费 | 欧美一级日韩免费不卡 | 91视频 - 88av| www.亚洲精品| 91免费观看国产 | 欧亚日韩精品一区二区在线 | 精品国内自产拍在线观看视频 | 国产视频一区二区三区在线 | 成人av播放 | 91热爆视频 | 国产日韩欧美在线播放 | av中文字幕在线播放 | 成人国产网址 | 91看片看淫黄大片 | 精品国产一区二区三区在线 | www.黄色小说.com | 国产亚洲精品久 | 四虎在线观看精品视频 | 国产在线91在线电影 | 天天操天天射天天操 | 伊人久久精品久久亚洲一区 | 色婷婷导航| 国产精品美女久久久久久免费 | 久久综合精品国产一区二区三区 | 国产超碰在线观看 | 精品欧美一区二区三区久久久 | 精品少妇一区二区三区在线 | www激情网 | 欧美另类v | 国产网红在线观看 | 久久人人爽人人爽人人片av免费 | 精品视频免费在线 | 国产精品video爽爽爽爽 | 国产精品久久99综合免费观看尤物 | 免费看黄电影 | 中文字幕亚洲不卡 | 丰满少妇在线观看 | 天天色天天草天天射 | 青青河边草免费视频 | 中文字幕资源网在线观看 | 天天夜夜亚洲 | 九9热这里真品2 | 国产一线二线三线性视频 | 成人h动漫精品一区二 | 亚洲综合黄色 | 黄网站色欧美视频 | 91成人精品一区在线播放 | 欧美黑人巨大xxxxx | 久久香蕉国产精品麻豆粉嫩av | 色偷偷av男人天堂 | 日产av在线播放 | 探花视频在线观看+在线播放 | www日日| 亚洲欧美日韩精品久久久 | 日韩久久精品 | 最近中文字幕国语免费高清6 | av黄色在线| 成人久久18免费 | 特级西西444www高清大视频 | 久久久一本精品99久久精品 | 成年人在线免费看视频 | 在线综合 亚洲 欧美在线视频 | 久久图| 免费午夜av| 国产美女永久免费 | 天天操天天射天天 | 日韩中文字幕免费 | 欧美a影视 | 97在线资源 | 91网在线看 | 99国产一区二区三精品乱码 | 91看片淫黄大片一级在线观看 | 黄色片网站大全 | 日韩欧美69 | 在线观看国产一区 | 久久精品成人欧美大片古装 | 色综合天天色综合 | 午夜12点 | 成人久久亚洲 | 在线观看视频一区二区三区 | 亚洲国产播放 | 成人在线观看av | 日本护士撒尿xxxx18 | www.色就是色 | 中文字幕久久精品一区 | 亚洲一区网站 | 美女激情影院 | 欧美成亚洲 | 免费观看性生活大片3 | www好男人| 探花视频免费观看高清视频 | 成人午夜免费剧场 | 91在线视频免费观看 | 天天躁日日躁狠狠躁 | 亚洲乱码国产乱码精品天美传媒 | 国产精品免费看久久久8精臀av | 亚洲一级片| 精品国产欧美一区二区 | 亚洲乱码国产乱码精品天美传媒 | 91麻豆精品 | 国产一级大片在线观看 | 黄色电影在线免费观看 | 久久兔费看a级 | 久久久久久久久久久精 | 97成人精品区在线播放 | 久久久免费精品 | 国产精品久久久久9999 | 在线观看一二三区 | 蜜桃视频日本 | 亚洲最大色 | 丁香九月婷婷综合 | 久久久久黄 | 久久精品五月 | 中文字幕av在线播放 | 黄色网中文字幕 | 免费大片黄在线 | 日韩精品一区二区三区视频播放 | 亚洲五月六月 | 日操操 | 麻豆视频免费入口 | 国产999在线观看 | 国产精品日韩久久久久 | 成人教育av | 国内精品久久久久久久久久久 | 亚洲黄色app| 超碰公开97 | 天天激情综合 | 国产精品久久久一区二区三区网站 | 在线精品在线 | 久久久久激情电影 | www在线观看视频 | 国产久视频 | 国产精品国产三级国产不产一地 | 国产亚洲一区 | 激情视频亚洲 | 色婷婷www| 96国产精品视频 | 欧美一区二区视频97 | 日韩高清在线看 | www最近高清中文国语在线观看 | 日韩电影一区二区三区 | 一区二区三区在线影院 | 精品国产乱码久久久久久久 | 亚洲国产97在线精品一区 | 97精品国产91久久久久久久 | 久产久精国产品 | 国产成人一区二区三区在线观看 | 一本—道久久a久久精品蜜桃 | 色婷婷激情四射 | 国产麻豆果冻传媒在线观看 | 亚洲乱亚洲乱妇 | 最新婷婷色 | 久久综合日 | 深爱开心激情 | 亚洲精品ww | 国产免费叼嘿网站免费 | 婷婷午夜天| 黄a网| 波多野结衣在线观看视频 | 91av电影网 | 在线观看日本高清mv视频 | 亚洲免费小视频 | 国产麻豆果冻传媒在线观看 | 国产精品九九九九九九 | 天天射成人 | 9幺看片 | 国产五码一区 | 久久精品亚洲综合专区 | 亚洲丁香久久久 | 久久久免费视频播放 | 96精品高清视频在线观看软件特色 | 免费看黄电影 | 久久艹综合 | 少妇性bbb搡bbb爽爽爽欧美 | 在线观看国产日韩 | 国产精品久久久久婷婷二区次 | 免费久久久久久久 | 国产男女爽爽爽免费视频 | 日本女人在线观看 | 国产精品视频不卡 | 国产手机av在线 | 2019中文 | 九草视频在线观看 | 天天爱综合 | 美女免费视频观看网站 | 911免费视频| 亚洲精品乱码久久久久久蜜桃91 | 天天激情综合网 | 麻豆视屏 | 99视频在线免费播放 | 在线观看国产麻豆 | 99热这里只有精品1 av中文字幕日韩 | 在线视频1卡二卡三卡 | 天天操天天干天天操天天干 | 在线视频手机国产 | 91精品国 | 丁香婷婷色月天 | 国产精品久久久一区二区三区网站 | 一区二区三区日韩在线 | 欧美久久久久久久 | 国产美女在线精品免费观看 | 亚洲一级片免费观看 | 69精品视频 | 国产中文字幕在线播放 | av福利在线播放 | 91精品国产91久久久久福利 | 欧美另类美少妇69xxxx | 国际av在线 | av亚洲产国偷v产偷v自拍小说 | 国内精品在线观看视频 | 久章操 | 国产在线更新 | 国产精品免费观看国产网曝瓜 | 欧美激情xxxx性bbbb | 久久久一本精品99久久精品 | 国产成人精品一区在线 | 99精品偷拍视频一区二区三区 | 精品福利在线视频 | 国产美女搞久久 | 亚洲免费精品一区二区 | 亚洲最新av网站 | 国产精品久久久久久久久久直播 | 久久久久北条麻妃免费看 | 亚洲国产一区在线观看 | 黄色片视频在线观看 | 日韩v欧美v日本v亚洲v国产v | 粉嫩av一区二区三区免费 | www.成人精品 | 911精品美国片911久久久 | 国内精品久久久久久久影视简单 | 另类五月激情 | 久久午夜精品影院一区 | www.香蕉视频在线观看 | 国产成人777777 | www.夜夜操.com | 国产在线观看二区 | 激情丁香婷婷 | 国产一区二区久久久久 | 激情文学综合丁香 | www色婷婷com | 免费久久片 | 成人高清在线观看 | 日本黄色免费大片 | 日日爽夜夜操 | 婷婷综合av | 欧美一级电影免费观看 | 91亚洲精品乱码久久久久久蜜桃 | 精品国产1区2区 | japanesexxxxfreehd乱熟 | 色综合久久天天 | 91精品第一页 | 九九涩涩av台湾日本热热 | 精品一区三区 | 伊人中文字幕在线 | 中文字幕电影在线 | 欧美一级电影免费观看 | 欧美色图一区 | 亚洲日本韩国一区二区 | 欧美网站黄色 | 久草在线看片 | 91在线免费视频观看 | 九九免费精品 | 中文字幕视频一区 | 欧美性大胆 | 精品视频区 | 国产免费观看久久 | 欧美精品乱码久久久久久按摩 | 日韩欧美视频一区二区 | 成人中心免费视频 | 成人a v视频 | 99精品久久99久久久久 | 成人91av | 精品在线视频观看 | 久久精品国产亚洲精品2020 | 日韩一二三区不卡 | 最近中文字幕免费观看 | 特级黄录像视频 | 麻豆视频91 | a级国产乱理伦片在线观看 亚洲3级 | 精品国产一区二区三区久久久蜜臀 | 四虎免费在线观看视频 | 91中文字幕在线观看 | 一级一片免费看 | 久久国产精品网站 | 波多野结衣电影一区二区 | 麻豆传媒视频在线播放 | 久久国产免 | 一区二区三区日韩视频在线观看 | 天天综合导航 | 一区二区三区视频在线 | 免费观看xxxx9999片 | 免费日韩 精品中文字幕视频在线 | 成人综合婷婷国产精品久久免费 | 永久免费的av电影 | 808电影 | 日韩在线视频网站 | 久久精品人 | 国产午夜精品一区 | 在线观看视频h | 婷婷激情在线 | 国产精品99久久久久久小说 | 国产va饥渴难耐女保洁员在线观看 | 久久久精品视频网站 | 午夜久久福利视频 | 91九色视频导航 | 日韩午夜精品福利 | 中文一区二区三区在线观看 | 丁香伊人网 | 香蕉视频国产在线 | 亚洲国产精品一区二区久久,亚洲午夜 | 超碰日韩 | 91精品日韩 | 日韩色视频在线观看 | 在线播放视频一区 | 久久精品视频在线 | 91人网站 | 九九免费在线观看视频 | 激情偷乱人伦小说视频在线观看 | 中文字幕无吗 | 国产亚洲视频在线免费观看 | 亚洲黄色大片 | 欧美国产日韩在线观看 | 久久免费成人精品视频 | 国产一级高清视频 | 亚洲一区不卡视频 | 五月婷婷六月丁香在线观看 | 天天做天天爱天天综合网 | 综合影视| 在线观看免费观看在线91 | 又湿又紧又大又爽a视频国产 | 人人插人人玩 | 国产精品久久久久婷婷二区次 | 91视频免费看网站 | 国产99久久精品一区二区300 | 日韩剧情| 涩五月婷婷 | 精品免费视频. | 精品国产一区二区三区久久影院 | 免费视频区 | 亚洲天天干 | www.久久久久 | 91亚洲精品乱码久久久久久蜜桃 | 在线看日韩av | 亚洲在线网址 | 亚洲伊人成综合网 | 日日夜夜婷婷 | 久久久久久久久电影 | 久久国产精品精品国产色婷婷 | 久久精品久久精品久久39 | 欧美成人精品欧美一级乱 | 国产精品免费人成网站 | 91av在线免费 | 五月婷影院 | 九九九毛片 | 99在线视频网站 | 日韩欧美一区二区三区视频 | 手机av电影在线 | 国产亚洲精品久久19p | 久久激情视频免费观看 | 成人久久亚洲 | 久久久精品国产一区二区电影四季 | www久久久久 | 国产精品免费小视频 | 国产精品久久久久aaaa | 国产韩国日本高清视频 | 五月婷婷深开心 | 免费a v网站| 久久开心激情 | 久久久久久久久久久久久影院 | 欧美一区二视频在线免费观看 | 久久久免费看片 | 国际精品久久 | 久久久精品国产免费观看一区二区 | 成人三级网站在线观看 | 色综合天天做天天爱 | 国产精品密入口果冻 | 亚洲成人动漫在线观看 | 免费色视频网站 | 亚洲国内精品 | 亚洲电影图片小说 | 韩国一区二区三区视频 | 一区中文字幕电影 | 日韩av影片在线观看 | www久草| 成人在线免费观看网站 | av中文字幕亚洲 | 亚洲电影一级黄 | 亚洲激情电影在线 | 欧美另类重口 | 日韩高清免费无专码区 | 狠狠狠色狠狠色综合 | 天天干,夜夜爽 | 国产视频精品在线 | 黄色小说在线免费观看 | 国产免费又黄又爽 | 免费在线成人av | 免费在线激情电影 | 亚洲欧美国内爽妇网 | 天堂麻豆 | 天天操天天干天天综合网 | 久久精品一区二区三区中文字幕 | 欧美乱码精品一区 | 狠狠干夜夜爱 | 精品视频不卡 | 免费a v视频 | 日本午夜在线亚洲.国产 | 丝袜美女在线观看 | 久草在线视频免赞 | 久久免费资源 | 国产永久免费观看 | 午夜天使| 国产精品久久久久久久久久久免费 | 国产精品日韩高清 | 808电影 | 国产精品不卡av | 国产精品九九九 | 91香蕉嫩草 | 国产精品高清免费在线观看 | 麻豆成人在线观看 | 国产免费亚洲高清 | av线上看| 久草精品视频在线播放 | 丁香五月缴情综合网 | 91最新视频在线观看 | 不卡电影免费在线播放一区 | 九九九热精品 | www.色婷婷.com | av中文字幕在线看 | 欧美日韩免费在线视频 | 美女国内精品自产拍在线播放 | 青青视频一区 | 国产精品毛片一区二区三区 | 色婷婷久久久 | 久久超碰99 | 精品a级片 | 免费看黄在线网站 | 色综合久久精品 | www看片网站| 三级性生活视频 | www.天天综合 | 国产成人精品久 | 久久精品亚洲精品国产欧美 | 欧美日韩一区二区三区在线免费观看 | 狠狠色丁香婷婷 | 天天看天天干天天操 | 日韩中文久久 | 国产精品 中文字幕 亚洲 欧美 | 五月天堂色 | 黄色app网站在线观看 | 国产一在线精品一区在线观看 | 激情av资源网 | 狠狠干综合 | 婷婷六月天天 | 日韩国产欧美在线视频 | 日日日操 | 久久一及片| 九九爱免费视频在线观看 | 日韩欧美视频在线播放 | 狠狠色丁香久久婷婷综合丁香 | 中文在线a√在线 | 日日爱999| 国产精品久久久久婷婷二区次 | 色偷偷88888欧美精品久久久 | 91精品成人 | 国产麻豆精品久久一二三 | 成人国产电影在线观看 | 9草在线 | 国产专区日韩专区 | 天天拍天天色 | 欧美视频不卡 | 日韩精品一区不卡 | 日韩欧美视频在线免费观看 | 免费看黄色大全 | 欧美在线视频一区二区 | 91精品国产一区二区在线观看 | 国产精品美女免费视频 | 91麻豆免费版 | 日韩av免费在线电影 | 欧美在线观看小视频 | 久久大视频 | 成人免费一级 | 超碰公开在线观看 | 精品一区二区电影 | 婷婷激情在线 | 国产精品专区h在线观看 | 久久综合激情 | 美女精品国产 | 欧美日韩首页 | 天天草av | 欧美久久久久久久久久久久久 | 视频91 | 在线视频欧美精品 | 天天操天天干天天爽 | 992tv人人网tv亚洲精品 | 国产手机视频在线播放 | aaa日本高清在线播放免费观看 | 波多野结衣电影久久 | 91精品视频一区二区三区 | 手机在线小视频 | 精品国产aⅴ麻豆 | 五月婷婷综合在线 | 国产在线观看你懂得 | 亚洲国产精品久久久久婷婷884 | 亚洲精区二区三区四区麻豆 | 国产理论影院 | 5月丁香婷婷综合 | 久久成人国产精品免费软件 | 国产精品一区二区免费 | 91精品久久久久久粉嫩 | 在线亚洲小视频 | 2000xxx影视| 国产视频网站在线观看 | 久久亚洲欧美日韩精品专区 | 欧美日韩国产高清视频 | 免费高清在线一区 | 成人资源在线 | 悠悠av资源片 | 国产在线传媒 | 久久免费福利 | 色婷婷综合久久久 | 久久夜色精品国产欧美乱 | 日韩精品久久久久久 | 五月天久久久久 | 天天干天天操av | 不卡的av在线播放 | 欧美一级特黄高清视频 | 99热手机在线观看 | 国产精品乱码一区二区视频 | 91理论片午午伦夜理片久久 | 9在线观看免费高清完整版在线观看明 | 精品在线视频一区二区三区 | 成人免费亚洲 | 福利视频午夜 | 久久精品99久久 | 日韩精选在线观看 | 美女国产免费 | 97超碰人人澡 | 国内外成人在线视频 | 手机在线中文字幕 | 一级免费看| 成人免费观看完整版电影 | 精品99在线观看 | 久久久久久久久久久影院 | 四虎免费在线观看视频 | 成人免费在线视频 | 国产经典 欧美精品 | 欧美在线视频第一页 | 中文字幕视频在线播放 | 成人免费观看大片 | 五月婷婷六月丁香在线观看 | 欧美一区二区三区不卡 | 成人9ⅰ免费影视网站 | 午夜影院在线观看18 | 免费试看一区 | 国产尤物在线 | 欧美淫aaa免费观看 日韩激情免费视频 | 久久久久久久久久久久久影院 | 欧美a级在线 | 国内精品久久久久久久影视麻豆 | 日韩成人精品在线观看 | 欧美日韩国产在线 | 日韩精品首页 | 日韩欧美一区二区三区视频 | 久久看毛片 | 国产精品99久久久久久久久久久久 | 一区二区三区电影大全 | 成人av高清在线观看 | 91视频在线网址 | 中文字幕av免费观看 | 天天操天天艹 | 中文字幕成人av | 成年人免费观看在线视频 | 久久免费高清 | 一级片免费在线 | 丁香花五月 | 亚洲精品福利在线观看 | 午夜美女wwww | 婷婷综合| 中文不卡视频 | www色av| 狠狠综合网 | 成人av资源 | 91自拍91| 成人一级在线观看 | 91亚洲精品久久久蜜桃 | 成人av久久 | 日日夜夜av| 成人h在线观看 | 天堂av影院 | 三三级黄色片之日韩 | 国产午夜精品福利视频 | 午夜神马福利 | 国产淫a| 久久人人爽人人人人片 | 国产五十路毛片 | av在线激情 | 狠狠色噜噜狠狠狠狠2022 | 久久tv| 久视频在线播放 | 天天干天天操天天拍 | 国产午夜小视频 | av官网在线 | 狠狠躁夜夜a产精品视频 | 欧美日韩一区二区在线观看 | 91人人视频在线观看 | 免费在线观看午夜视频 | 在线a亚洲视频播放在线观看 | www99精品| 成年人在线免费看视频 | 日本99精品 | 涩涩网站在线播放 | 久久久久久蜜av免费网站 | 四虎影视精品永久在线观看 | 午夜91视频| av福利在线 | 国产美女视频网站 | 欧美另类巨大 | 六月天综合网 | 超碰免费观看 | 国产综合视频在线观看 | 国产精品久久久久三级 | 久久精品牌麻豆国产大山 |