亭亭五月天在线观看,亭亭五月天在线观看,国产最新av一区二区,国产 高清 中文字幕,99re热久久亚洲综合精品成人,熟妇 一区二区三区,一级做a爰片性色毛片武则天,美女的骚穴视频播放,国产美女午夜免费视频

首頁>國內(nèi) > 正文

保姆級教程!2 萬字 + 30 張圖搞懂 MySQL 是怎么加行級鎖的?

2022-11-17 10:00:47來源:小林coding

正文

是不是很多人都對 MySQL 加行級鎖的規(guī)則搞的迷迷糊糊,對記錄一會加的是 next-key 鎖,一會加是間隙鎖,一會又是記錄鎖。

坦白說,確實還挺復雜的,但是好在我找點了點規(guī)律,也知道如何如何用命令分析加了什么類型的行級鎖。

為了說清楚這三件事情:


(資料圖)

1、MySQL 是怎么加行級鎖的?有什么規(guī)則?

2、為什么MySQL 要這么加行級鎖?

3、如何用命令分析加了什么行級鎖?

所以我重寫了這篇文章。

目錄結(jié)構(gòu)如下:

什么 SQL 語句會加行級鎖?

InnoDB 引擎是支持行級鎖的,而 MyISAM 引擎并不支持行級鎖,所以后面的內(nèi)容都是基于 InnoDB 引擎 的。

所以,在說 MySQL 是怎么加行級鎖的時候,其實是在說 InnoDB 引擎是怎么加行級鎖的。

普通的 select 語句是不會對記錄加鎖的,因為它屬于快照讀,是通過 MVCC(多版本并發(fā)控制)實現(xiàn)的。

如果要在查詢時對記錄加行級鎖,可以使用下面這兩個方式,這兩種查詢會加鎖的語句稱為鎖定讀。

//對讀取的記錄加共享鎖(S型鎖)select ... lock in share mode;//對讀取的記錄加獨占鎖(X型鎖)select ... for update;

上面這兩條語句必須在一個事務(wù)中,因為當事務(wù)提交了,鎖就會被釋放,所以在使用這兩條語句的時候,要加上 begin 或者 start transaction 開啟事務(wù)的語句。

**除了上面這兩條鎖定讀語句會加行級鎖之外,update 和 delete 操作都會加行級鎖,且鎖的類型都是獨占鎖(X型鎖)**。

//對操作的記錄加獨占鎖(X型鎖)updaet table .... where id = 1;//對操作的記錄加獨占鎖(X型鎖)delete from table where id = 1;

共享鎖(S鎖)滿足讀讀共享,讀寫互斥。獨占鎖(X鎖)滿足寫寫互斥、讀寫互斥。

行級鎖有哪些種類?

不同隔離級別下,行級鎖的種類是不同的。

在讀已提交隔離級別下,行級鎖的種類只有記錄鎖,也就是僅僅把一條記錄鎖上。

在可重復讀隔離級別下,行級鎖的種類除了有記錄鎖,還有間隙鎖(目的是為了避免幻讀),所以行級鎖的種類主要有三類:

Record Lock,記錄鎖,也就是僅僅把一條記錄鎖上;Gap Lock,間隙鎖,鎖定一個范圍,但是不包含記錄本身;Next-Key Lock:Record Lock + Gap Lock 的組合,鎖定一個范圍,并且鎖定記錄本身。

接下來,分別介紹這三種行級鎖。

Record Lock

Record Lock 稱為記錄鎖,鎖住的是一條記錄。而且記錄鎖是有 S 鎖和 X 鎖之分的:

當一個事務(wù)對一條記錄加了 S 型記錄鎖后,其他事務(wù)也可以繼續(xù)對該記錄加 S 型記錄鎖(S 型與 S 鎖兼容),但是不可以對該記錄加 X 型記錄鎖(S 型與 X 鎖不兼容);當一個事務(wù)對一條記錄加了 X 型記錄鎖后,其他事務(wù)既不可以對該記錄加 S 型記錄鎖(S 型與 X 鎖不兼容),也不可以對該記錄加 X 型記錄鎖(X 型與 X 鎖不兼容)。

舉個例子,當一個事務(wù)執(zhí)行了下面這條語句:

mysql > begin;mysql > select * from t_test where id = 1 for update;

事務(wù)會對表中主鍵 id = 1 的這條記錄加上 X 型的記錄鎖,如果這時候其他事務(wù)對這條記錄進行刪除或者更新操作,那么這些操作都會被阻塞。注意,其他事務(wù)插入一條 id = 1 的新記錄并不會被阻塞,而是會報主鍵沖突的錯誤,這是因為主鍵有唯一性的約束。

當事務(wù)執(zhí)行 commit 后,事務(wù)過程中生成的鎖都會被釋放。

Gap Lock

Gap Lock 稱為間隙鎖,只存在于可重復讀隔離級別,目的是為了解決可重復讀隔離級別下幻讀的現(xiàn)象。

假設(shè),表中有一個范圍 id 為(3,5)間隙鎖,那么其他事務(wù)就無法插入 id = 4 這條記錄了,這樣就有效的防止幻讀現(xiàn)象的發(fā)生。

間隙鎖雖然存在 X 型間隙鎖和 S 型間隙鎖,但是并沒有什么區(qū)別,間隙鎖之間是兼容的,即兩個事務(wù)可以同時持有包含共同間隙范圍的間隙鎖,并不存在互斥關(guān)系,因為間隙鎖的目的是防止插入幻影記錄而提出的。

Next-Key Lock

Next-Key Lock 稱為臨鍵鎖,是 Record Lock + Gap Lock 的組合,鎖定一個范圍,并且鎖定記錄本身。

假設(shè),表中有一個范圍 id 為(3,5] 的 next-key lock,那么其他事務(wù)即不能插入 id = 4 記錄,也不能修改和刪除 id = 5 這條記錄。

所以,next-key lock 即能保護該記錄,又能阻止其他事務(wù)將新記錄插入到被保護記錄前面的間隙中。

next-key lock 是包含間隙鎖+記錄鎖的,如果一個事務(wù)獲取了 X 型的 next-key lock,那么另外一個事務(wù)在獲取相同范圍的 X 型的 next-key lock 時,是會被阻塞的。

比如,一個事務(wù)持有了范圍為 (1, 10] 的 X 型的 next-key lock,那么另外一個事務(wù)在獲取相同范圍的 X 型的 next-key lock 時,就會被阻塞。

雖然相同范圍的間隙鎖是多個事務(wù)相互兼容的,但對于記錄鎖,我們是要考慮 X 型與 S 型關(guān)系,X 型的記錄鎖與 X 型的記錄鎖是沖突的。

MySQL 是怎么加行級鎖的?

行級鎖加鎖規(guī)則比較復雜,不同的場景,加鎖的形式是不同的。

加鎖的對象是索引,加鎖的基本單位是 next-key lock,它是由記錄鎖和間隙鎖組合而成的,next-key lock 是前開后閉區(qū)間,而間隙鎖是前開后開區(qū)間。

但是,next-key lock 在一些場景下會退化成記錄鎖或間隙鎖。

那到底是什么場景呢?總結(jié)一句,在能使用記錄鎖或者間隙鎖就能避免幻讀現(xiàn)象的場景下, next-key lock 就會退化成退化成記錄鎖或間隙鎖。

這次會以下面這個表結(jié)構(gòu)來進行實驗說明:

CREATE TABLE `user` (  `id` bigint NOT NULL AUTO_INCREMENT,  `name` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL,  `age` int NOT NULL,  PRIMARY KEY (`id`),  KEY `index_age` (`age`) USING BTREE) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

其中,id 是主鍵索引(唯一索引),age 是普通索引(非唯一索引),name 是普通的列。

表中的有這些行記錄:

這次實驗環(huán)境的MySQL 版本是 8.0.26,隔離級別是「可重復讀」。

不同版本的加鎖規(guī)則可能是不同的,但是大體上是相同的。

唯一索引等值查詢

當我們用唯一索引進行等值查詢的時候,查詢的記錄存不存在,加鎖的規(guī)則也會不同:

當查詢的記錄是「存在」的,在索引樹上定位到這一條記錄后,將該記錄的索引中的 next-key lock 會退化成「記錄鎖」。

當查詢的記錄是「不存在」的,在索引樹找到第一條大于該查詢記錄的記錄后,將該記錄的索引中的 next-key lock 會退化成「間隙鎖」。

接下里用兩個案例來說明。

1、記錄存在的情況

假設(shè)事務(wù) A 執(zhí)行了這條等值查詢語句,查詢的記錄是「存在」于表中的。

mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from user where id = 1 for update;+----+--------+-----+| id | name   | age |+----+--------+-----+|  1 | 路飛   |  19 |+----+--------+-----+1 row in set (0.02 sec)

那么,事務(wù) A 會為 id 為 1 的這條記錄就會加上X 型的記錄鎖。

接下來,如果有其他事務(wù),對 id 為 1 的記錄進行更新或者刪除操作的話,這些操作都會被阻塞,因為更新或者刪除操作也會對記錄加 X 型的記錄鎖,而 X 鎖和 X 鎖之間是互斥關(guān)系。

比如,下面這個例子:

因為事務(wù) A 對 id = 1的記錄加了X 型的記錄鎖,所以事務(wù) B 在修改 id=1 的記錄時會被阻塞,事務(wù) C 在刪除 id=1 的記錄時也會被阻塞。

有什么命令可以分析加了什么鎖?

我們可以通過select * from performance_schema.data_locks\G;這條語句,查看事務(wù)執(zhí)行 SQL 過程中加了什么鎖。

我們以前面的事務(wù) A 作為例子,分析下下它加了什么鎖。

從上圖可以看到,共加了兩個鎖,分別是:

表鎖:X 類型的意向鎖;行鎖:X 類型的記錄鎖;

這里我們重點關(guān)注行級鎖,圖中 LOCK_TYPE 中的 RECORD 表示行級鎖,而不是記錄鎖的意思。

通過 LOCK_MODE 可以確認是 next-key 鎖,還是間隙鎖,還是記錄鎖:

如果 LOCK_MODE 為X,說明是 next-key 鎖;如果 LOCK_MODE 為X, REC_NOT_GAP,說明是記錄鎖;如果 LOCK_MODE 為X, GAP,說明是間隙鎖;

因此,此時事務(wù) A 在 id = 1 記錄的主鍵索引上加的是記錄鎖,鎖住的范圍是 id 為 1 的這條記錄。這樣其他事務(wù)就無法對 id 為 1 的這條記錄進行更新和刪除操作了。

從這里我們也可以得知,加鎖的對象是針對索引,因為這里查詢語句掃描的 B+ 樹是聚簇索引樹,即主鍵索引樹,所以是對主鍵索引加鎖。將對應(yīng)記錄的主鍵索引加 記錄鎖后,就意味著其他事務(wù)無法對該記錄進行更新和刪除操作了。

為什么唯一索引等值查詢并且查詢記錄存在的場景下,該記錄的索引中的 next-key lock 會退化成記錄鎖?

原因就是在唯一索引等值查詢并且查詢記錄存在的場景下,僅靠記錄鎖也能避免幻讀的問題。

幻讀的定義就是,當一個事務(wù)前后兩次查詢的結(jié)果集,不相同時,就認為發(fā)生幻讀。所以,要避免幻讀就是避免結(jié)果集某一條記錄被其他事務(wù)刪除,或者有其他事務(wù)插入了一條新記錄,這樣前后兩次查詢的結(jié)果集就不會出現(xiàn)不相同的情況。

由于主鍵具有唯一性,所以其他事務(wù)插入 id = 1 的時候,會因為主鍵沖突,導致無法插入 id = 1 的新記錄。這樣事務(wù) A 在多次查詢 id = 1 的記錄的時候,不會出現(xiàn)前后兩次查詢的結(jié)果集不同,也就避免了幻讀的問題。由于對 id = 1 加了記錄鎖,其他事務(wù)無法刪除該記錄,這樣事務(wù) A 在多次查詢 id = 1 的記錄的時候,不會出現(xiàn)前后兩次查詢的結(jié)果集不同,也就避免了幻讀的問題。

2、記錄不存在的情況

假設(shè)事務(wù) A 執(zhí)行了這條等值查詢語句,查詢的記錄是「不存在」于表中的。

mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from user where id = 2 for update;Empty set (0.03 sec)

接下來,通過select * from performance_schema.data_locks\G;這條語句,查看事務(wù)執(zhí)行 SQL 過程中加了什么鎖。

從上圖可以看到,共加了兩個鎖,分別是:

表鎖:X 類型的意向鎖;行鎖:X 類型的間隙鎖;

因此,此時事務(wù) A 在 id = 5 記錄的主鍵索引上加的是間隙鎖,鎖住的范圍是 (1, 5)。

接下來,如果有其他事務(wù)插入 id 值為 2、3、4 這一些記錄的話,這些插入語句都會發(fā)生阻塞。

注意,如果其他事務(wù)插入的 id = 1 或者 id = 5 的記錄話,并不會發(fā)生阻塞,而是報主鍵沖突的錯誤,因為表中已經(jīng)存在 id = 1 和 id = 5 的記錄了。

比如,下面這個例子:

因為事務(wù) A 在 id = 5 記錄的主鍵索引上加了范圍為 (1, 5) 的 X 型間隙鎖,所以事務(wù) B 在插入一條 id 為 3 的記錄時會被阻塞住,即無法插入 id = 3 的記錄。

間隙鎖的范圍(1, 5),是怎么確定的?

根據(jù)我的經(jīng)驗,如果 LOCK_MODE 是 next-key 鎖或者間隙鎖,那么 LOCK_DATA 就表示鎖的范圍「右邊界」,此次的事務(wù) A 的 LOCK_DATA 是 5。

然后鎖范圍的「左邊界」是表中 id 為 5 的上一條記錄的 id 值,即 1。

因此,間隙鎖的范圍(1, 5)。

為什么唯一索引等值查詢并且查詢記錄「不存在」的場景下,在索引樹找到第一條大于該查詢記錄的記錄后,要將該記錄的索引中的 next-key lock 會退化成「間隙鎖」?

原因就是在唯一索引等值查詢并且查詢記錄不存在的場景下,僅靠間隙鎖就能避免幻讀的問題。

為什么 id = 5 記錄上的主鍵索引的鎖不可以是 next-key lock?如果是 next-key lock,就意味著其他事務(wù)無法刪除 id = 5 這條記錄,但是這次的案例是查詢 id = 2 的記錄,只要保證前后兩次查詢 id = 2 的結(jié)果集相同,就能避免幻讀的問題了,所以即使 id =5 被刪除,也不會有什么影響,那就沒必須加 next-key lock,因此只需要在 id = 5 加間隙鎖,避免其他事務(wù)插入 id = 2 的新記錄就行了。為什么不可以針對不存在的記錄加記錄鎖?鎖是加在索引上的,而這個場景下查詢的記錄是不存在的,自然就沒辦法鎖住這條不存在的記錄。

唯一索引范圍查詢

范圍查詢和等值查詢的加鎖規(guī)則是不同的。

當唯一索引進行范圍查詢時,會對每一個掃描到的索引加 next-key 鎖,然后如果遇到下面這些情況,會退化成記錄鎖或者間隙鎖:

情況一:針對「大于等于」的范圍查詢,因為存在等值查詢的條件,那么如果等值查詢的記錄是存在于表中,那么該記錄的索引中的 next-key 鎖會退化成記錄鎖。情況二:針對「小于或者小于等于」的范圍查詢,要看條件值的記錄是否存在于表中:

當條件值的記錄不在表中,那么不管是「小于」還是「小于等于」條件的范圍查詢,掃描到終止范圍查詢的記錄時,該記錄的索引的 next-key 鎖會退化成間隙鎖,其他掃描到的記錄,都是在這些記錄的索引上加 next-key 鎖。

當條件值的記錄在表中,如果是「小于」條件的范圍查詢,掃描到終止范圍查詢的記錄時,該記錄的索引的 next-key 鎖會退化成間隙鎖,其他掃描到的記錄,都是在這些記錄的索引上加 next-key 鎖;如果「小于等于」條件的范圍查詢,掃描到終止范圍查詢的記錄時,該記錄的索引 next-key 鎖不會退化成間隙鎖。其他掃描到的記錄,都是在這些記錄的索引上加 next-key 鎖。

接下來,通過幾個實驗,才驗證我上面說的結(jié)論。

1、針對「大于或者大于等于」的范圍查詢實驗一:針對「大于」的范圍查詢的情況。

假設(shè)事務(wù) A 執(zhí)行了這條范圍查詢語句:

mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from user where id > 15 for update;+----+-----------+-----+| id | name      | age |+----+-----------+-----+| 20 | 香克斯    |  39 |+----+-----------+-----+1 row in set (0.01 sec)

事務(wù) A 加鎖變化過程如下:

最開始要找的第一行是 id = 20,由于查詢該記錄不是一個等值查詢(不是大于等于條件查詢),所以對該主鍵索引加的是范圍為 (15, 20] 的 next-key 鎖;由于是范圍查找,就會繼續(xù)往后找存在的記錄,雖然我們看見表中最后一條記錄是 id = 20 的記錄,但是實際在 Innodb 存儲引擎中,會用一個特殊的記錄來標識最后一條記錄,該特殊的記錄的名字叫 supremum pseudo-record ,所以掃描第二行的時候,也就掃描到了這個特殊記錄的時候,會對該主鍵索引加的是范圍為 (20, +∞] 的 next-key 鎖。停止掃描。

可以得知,事務(wù) A 在主鍵索引上加了兩個 X 型 的 next-key 鎖:

在 id = 20 這條記錄的主鍵索引上,加了范圍為 (15, 20] 的 next-key 鎖,意味著其他事務(wù)即無法更新或者刪除 id = 20 的記錄,同時無法插入 id 值為 16、17、18、19 的這一些新記錄。在特殊記錄( supremum pseudo-record)的主鍵索引上,加了范圍為 (20, +∞] 的 next-key 鎖,意味著其他事務(wù)無法插入 id 值大于 20 的這一些新記錄。

我們也可以通過select * from performance_schema.data_locks\G;這條語句來看看事務(wù) A 加了什么鎖。

輸出結(jié)果如下,我這里只截取了行級鎖的內(nèi)容。

從上圖中的分析中,也可以得到事務(wù) A 在主鍵索引上加了兩個 X 型 的next-key 鎖:

在 id = 20 這條記錄的主鍵索引上,加了范圍為 (15, 20] 的 next-key 鎖,意味著其他事務(wù)即無法更新或者刪除 id = 20 的記錄,同時無法插入 id 值為 16、17、18、19 的這一些新記錄。

在特殊記錄( supremum pseudo-record)的主鍵索引上,加了范圍為 (20, +∞] 的 next-key 鎖,意味著其他事務(wù)無法插入 id 值大于 20 的這一些新記錄。

實驗二:針對「大于等于」的范圍查詢的情況。

假設(shè)事務(wù) A 執(zhí)行了這條范圍查詢語句:

mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from user where id >= 15 for update;+----+-----------+-----+| id | name      | age |+----+-----------+-----+| 15 | 烏索普    |  20 || 20 | 香克斯    |  39 |+----+-----------+-----+2 rows in set (0.00 sec)

事務(wù) A 加鎖變化過程如下:

最開始要找的第一行是 id = 15,由于查詢該記錄是一個等值查詢(等于 15),所以該主鍵索引的 next-key 鎖會退化成記錄鎖,也就是僅鎖住 id = 15 這一行記錄。由于是范圍查找,就會繼續(xù)往后找存在的記錄,掃描到的第二行是 id = 20,于是對該主鍵索引加的是范圍為 (15, 20] 的 next-key 鎖;接著掃描到第三行的時候,掃描到了特殊記錄( supremum pseudo-record),于是對該主鍵索引加的是范圍為 (20, +∞] 的 next-key 鎖。停止掃描。

可以得知,事務(wù) A 在主鍵索引上加了三個 X 型 的鎖,分別是:

在 id = 15 這條記錄的主鍵索引上,加了記錄鎖,范圍是 id = 15 這一行記錄;意味著其他事務(wù)無法更新或者刪除 id = 15 的這一條記錄;在 id = 20 這條記錄的主鍵索引上,加了 next-key 鎖,范圍是 (15, 20] 。意味著其他事務(wù)即無法更新或者刪除 id = 20 的記錄,同時無法插入 id 值為 16、17、18、19 的這一些新記錄。在特殊記錄( supremum pseudo-record)的主鍵索引上,加了 next-key 鎖,范圍是 (20, +∞] 。意味著其他事務(wù)無法插入 id 值大于 20 的這一些新記錄。

我們也可以通過select * from performance_schema.data_locks\G;這條語句來看看事務(wù) A 加了什么鎖。

輸出結(jié)果如下,我這里只截取了行級鎖的內(nèi)容。

通過前面這個實驗,我們證明了:

針對「大于等于」條件的唯一索引范圍查詢的情況下, 如果條件值的記錄存在于表中,那么由于查詢該條件值的記錄是包含一個等值查詢的操作,所以該記錄的索引中的 next-key 鎖會退化成記錄鎖。

2、針對「小于或者小于等于」的范圍查詢

實驗一:針對「小于」的范圍查詢時,查詢條件值的記錄「不存在」表中的情況。

假設(shè)事務(wù) A 執(zhí)行了這條范圍查詢語句,注意查詢條件值的記錄(id 為 6)并不存在于表中。

mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from user where id < 6 for update;+----+--------+-----+| id | name   | age |+----+--------+-----+|  1 | 路飛   |  19 ||  5 | 索隆   |  21 |+----+--------+-----+3 rows in set (0.00 sec)

事務(wù) A 加鎖變化過程如下:

最開始要找的第一行是 id = 1,于是對該主鍵索引加的是范圍為 (-∞, 1] 的 next-key 鎖;由于是范圍查找,就會繼續(xù)往后找存在的記錄,掃描到的第二行是 id = 5,所以對該主鍵索引加的是范圍為 (1, 5] 的 next-key 鎖;由于掃描到的第二行記錄(id = 5),滿足 id < 6 條件,而且也沒有達到終止掃描的條件,接著會繼續(xù)掃描。掃描到的第三行是 id = 10,該記錄不滿足 id < 6 條件的記錄,所以 id = 10 這一行記錄的鎖會退化成間隙鎖,于是對該主鍵索引加的是范圍為 (5, 10) 的間隙鎖。

由于掃描到的第三行記錄(id = 10),不滿足 id < 6 條件,達到了終止掃描的條件,于是停止掃描。

從上面的分析中,可以得知事務(wù) A 在主鍵索引上加了三個 X 型的鎖:

在 id = 1 這條記錄的主鍵索引上,加了范圍為 (-∞, 1] 的 next-key 鎖,意味著其他事務(wù)即無法更新或者刪除 id = 1 的這一條記錄,同時也無法插入 id 小于 1 的這一些新記錄。在 id = 5 這條記錄的主鍵索引上,加了范圍為 (1, 5] 的 next-key 鎖,意味著其他事務(wù)即無法更新或者刪除 id = 5 的這一條記錄,同時也無法插入 id 值為 2、3、4 的這一些新記錄。在 id = 10 這條記錄的主鍵索引上,加了范圍為 (5, 10) 的間隙鎖,意味著其他事務(wù)無法插入 id 值為 6、7、8、9 的這一些新記錄。

我們也可以通過select * from performance_schema.data_locks\G;這條語句來看看事務(wù) A 加了什么鎖。

輸出結(jié)果如下,我這里只截取了行級鎖的內(nèi)容。

從上圖中的分析中,也可以得知事務(wù) A 在主鍵索引加的三個鎖,就是我們前面分析出那三個鎖。

雖然這次范圍查詢的條件是「小于」,但是查詢條件值的記錄不存在于表中( id 為 6 的記錄不在表中),所以如果事務(wù) A 的范圍查詢的條件改成 <= 6 的話,加的鎖還是和范圍查詢條件為 < 6 是一樣的。大家自己也驗證下這個結(jié)論。

因此,針對「小于或者小于等于」的唯一索引范圍查詢,如果條件值的記錄不在表中,那么不管是「小于」還是「小于等于」的范圍查詢,掃描到終止范圍查詢的記錄時,該記錄中索引的 next-key 鎖會退化成間隙鎖,其他掃描的記錄,則是在這些記錄的索引上加 next-key 鎖。

實驗二:針對「小于等于」的范圍查詢時,查詢條件值的記錄「存在」表中的情況。

假設(shè)事務(wù) A 執(zhí)行了這條范圍查詢語句,注意查詢條件值的記錄(id 為 5)存在于表中。

mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from user where id <= 5 for update;+----+--------+-----+| id | name   | age |+----+--------+-----+|  1 | 路飛   |  19 ||  5 | 索隆   |  21 |+----+--------+-----+2 rows in set (0.00 sec)

事務(wù) A 加鎖變化過程如下:

最開始要找的第一行是 id = 1,于是對該記錄加的是范圍為 (-∞, 1] 的 next-key 鎖;由于是范圍查找,就會繼續(xù)往后找存在的記錄,掃描到的第二行是 id = 5,于是對該記錄加的是范圍為 (1, 5] 的 next-key 鎖。由于主鍵索引具有唯一性,不會存在兩個 id = 5 的記錄,所以不會再繼續(xù)掃描,于是停止掃描。

從上面的分析中,可以得到事務(wù) A 在主鍵索引上加了 2 個 X 型的鎖:

在 id = 1 這條記錄的主鍵索引上,加了范圍為 (-∞, 1] 的 next-key 鎖。意味著其他事務(wù)即無法更新或者刪除 id = 1 的這一條記錄,同時也無法插入 id 小于 1 的這一些新記錄。在 id = 5 這條記錄的主鍵索引上,加了范圍為 (1, 5] 的 next-key 鎖。意味著其他事務(wù)即無法更新或者刪除 id = 5 的這一條記錄,同時也無法插入 id 值為 2、3、4 的這一些新記錄。

我們也可以通過select * from performance_schema.data_locks\G;這條語句來看看事務(wù) A 加了什么鎖。

輸出結(jié)果如下,我這里只截取了行級鎖的內(nèi)容。

從上圖中的分析中,可以得到事務(wù) A 在主鍵索引上加了兩個 X 型 next-key 鎖,分別是:

在 id = 1 這條記錄的主鍵索引上,加了范圍為 (-∞, 1] 的 next-key 鎖;

在 id = 5 這條記錄的主鍵索引上,加了范圍為(1, 5 ] 的 next-key 鎖。

實驗三:再來看針對「小于」的范圍查詢時,查詢條件值的記錄「存在」表中的情況。

如果事務(wù) A 的查詢語句是小于的范圍查詢,且查詢條件值的記錄(id 為 5)存在于表中。

select * from user where id < 5 for update;

事務(wù) A 加鎖變化過程如下:

最開始要找的第一行是 id = 1,于是對該記錄加的是范圍為 (-∞, 1] 的 next-key 鎖;由于是范圍查找,就會繼續(xù)往后找存在的記錄,掃描到的第二行是 id = 5,該記錄是第一條不滿足 id < 5 條件的記錄,于是**該記錄的鎖會退化為間隙鎖,鎖范圍是 (1,5)**。由于找到了第一條不滿足 id < 5 條件的記錄,于是停止掃描。

可以得知,此時事務(wù) A 在主鍵索引上加了兩種 X 型鎖:

在 id = 1 這條記錄的主鍵索引上,加了范圍為 (-∞, 1] 的 next-key 鎖,意味著其他事務(wù)即無法更新或者刪除 id = 1 的這一條記錄,同時也無法插入 id 小于 1 的這一些新記錄。在 id = 5 這條記錄的主鍵索引上,加了范圍為 (1,5) 的間隙鎖,意味著其他事務(wù)無法插入 id 值為 2、3、4 的這一些新記錄。

我們也可以通過select * from performance_schema.data_locks\G;這條語句來看看事務(wù) A 加了什么鎖。

輸出結(jié)果如下,我這里只截取了行級鎖的內(nèi)容。

從上圖中的分析中,可以得到事務(wù) A 在主鍵索引上加了X 型的范圍為 (-∞, 1] 的 next-key 鎖,和 X 型的范圍為 (1, 5) 的間隙鎖。

因此,通過前面這三個實驗,可以得知。

在針對「小于或者小于等于」的唯一索引(主鍵索引)范圍查詢時,存在這兩種情況會將索引的 next-key 鎖會退化成間隙鎖的:

當條件值的記錄「不在」表中時,那么不管是「小于」還是「小于等于」條件的范圍查詢,掃描到終止范圍查詢的記錄時,該記錄的主鍵索引中的 next-key 鎖會退化成間隙鎖,其他掃描到的記錄,都是在這些記錄的主鍵索引上加 next-key 鎖。當條件值的記錄「在」表中時:

如果是「小于」條件的范圍查詢,掃描到終止范圍查詢的記錄時,該記錄的主鍵索引中的 next-key 鎖會退化成間隙鎖,其他掃描到的記錄,都是在這些記錄的主鍵索引上,加 next-key 鎖。

如果是「小于等于」條件的范圍查詢,掃描到終止范圍查詢的記錄時,該記錄的主鍵索引中的 next-key 鎖「不會」退化成間隙鎖,其他掃描到的記錄,都是在這些記錄的主鍵索引上加 next-key 鎖。

非唯一索引等值查詢

當我們用非唯一索引進行等值查詢的時候,因為存在兩個索引,一個是主鍵索引,一個是非唯一索引(二級索引),所以在加鎖時,同時會對這兩個索引都加鎖,但是對主鍵索引加鎖的時候,只有滿足查詢條件的記錄才會對它們的主鍵索引加鎖。

針對非唯一索引等值查詢時,查詢的記錄存不存在,加鎖的規(guī)則也會不同:

當查詢的記錄「存在」時,由于不是唯一索引,所以肯定存在索引值相同的記錄,于是非唯一索引等值查詢的過程是一個掃描的過程,直到掃描到第一個不符合條件的二級索引記錄就停止掃描,然后在掃描的過程中,對掃描到的二級索引記錄加的是 next-key 鎖,而對于第一個不符合條件的二級索引記錄,該二級索引的 next-key 鎖會退化成間隙鎖。同時,在符合查詢條件的記錄的主鍵索引上加記錄鎖。當查詢的記錄「不存在」時,掃描到第一條不符合條件的二級索引記錄,該二級索引的 next-key 鎖會退化成間隙鎖。因為不存在滿足查詢條件的記錄,所以不會對主鍵索引加鎖。

接下里用兩個實驗來說明。

1、記錄不存在的情況

實驗一:針對非唯一索引等值查詢時,查詢的值不存在的情況。

先來說說非唯一索引等值查詢時,查詢的記錄不存在的情況,因為這個比較簡單。

假設(shè)事務(wù) A 對非唯一索引(age)進行了等值查詢,且表中不存在 age = 25 的記錄。

mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from user where age = 25 for update;Empty set (0.00 sec)

事務(wù) A 加鎖變化過程如下:

定位到第一條不符合查詢條件的二級索引記錄,即掃描到 age = 39,于是**該二級索引的 next-key 鎖會退化成間隙鎖,范圍是 (22, 39)**。停止查詢

事務(wù) A 在 age = 39 記錄的二級索引上,加了 X 型的間隙鎖,范圍是 (22, 39)。意味著其他事務(wù)無法插入 age 值為 23、24、25、26、....、38 這些新記錄。不過對于插入 age = 22 和 age = 39 記錄的語句,在一些情況是可以成功插入的,而一些情況則無法成功插入,具體哪些情況,會在后面說。

我們也可以通過select * from performance_schema.data_locks\G;這條語句來看看事務(wù) A 加了什么鎖。

輸出結(jié)果如下,我這里只截取了行級鎖的內(nèi)容。

從上圖的分析,可以看到,事務(wù) A 在 age = 39 記錄的二級索引上(INDEX_NAME: index_age ),加了范圍為 (22, 39) 的 X 型間隙鎖。

此時,如果有其他事務(wù)插入了 age 值為 23、24、25、26、....、38 這些新記錄,那么這些插入語句都會發(fā)生阻塞。不過對于插入 age = 39 記錄的語句,在一些情況是可以成功插入的,而一些情況則無法成功插入,具體哪些情況,接下來我們就說!

當有一個事務(wù)持有二級索引的間隙鎖 (22, 39) 時,什么情況下,可以讓其他事務(wù)的插入 age = 22 或者 age = 39 記錄的語句成功?又是什么情況下,插入 age = 22 或者 age = 39 記錄時的語句會被阻塞?

我們先要清楚,什么情況下插入語句會發(fā)生阻塞。

插入語句在插入一條記錄之前,需要先定位到該記錄在 B+樹 的位置,如果插入的位置的下一條記錄的索引上有間隙鎖,才會發(fā)生阻塞。

在分析二級索引的間隙鎖是否可以成功插入記錄時,我們要先要知道二級索引樹是如何存放記錄的?

二級索引樹是按照二級索引值(age列)按順序存放的,在相同的二級索引值情況下, 再按主鍵 id 的順序存放。知道了這個前提,我們才能知道執(zhí)行插入語句的時候,插入的位置的下一條記錄是誰。

基于前面的實驗,事務(wù) A 是在 age = 39 記錄的二級索引上,加了 X 型的間隙鎖,范圍是 (22, 39)。

插入 age = 22 記錄的成功和失敗的情況分別如下:

當其他事務(wù)插入一條 age = 22,id = 3 的記錄的時候,在二級索引樹上定位到插入的位置,而該位置的下一條是 id = 10、age = 22 的記錄,該記錄的二級索引上沒有間隙鎖,所以這條插入語句可以執(zhí)行成功。當其他事務(wù)插入一條 age = 22,id = 12 的記錄的時候,在二級索引樹上定位到插入的位置,而該位置的下一條是 id = 20、age = 39 的記錄,正好該記錄的二級索引上有間隙鎖,所以這條插入語句會被阻塞,無法插入成功。

插入 age = 39 記錄的成功和失敗的情況分別如下:

當其他事務(wù)插入一條 age = 39,id = 3 的記錄的時候,在二級索引樹上定位到插入的位置,而該位置的下一條是 id = 20、age = 39 的記錄,正好該記錄的二級索引上有間隙鎖,所以這條插入語句會被阻塞,無法插入成功。當其他事務(wù)插入一條 age = 39,id = 21 的記錄的時候,在二級索引樹上定位到插入的位置,而該位置的下一條記錄不存在,也就沒有間隙鎖了,所以這條插入語句可以插入成功。

所以,當有一個事務(wù)持有二級索引的間隙鎖 (22, 39) 時,插入 age = 22 或者 age = 39 記錄的語句是否可以執(zhí)行成功,關(guān)鍵還要考慮插入記錄的主鍵值,因為「二級索引值(age列)+主鍵值(id列)」才可以確定插入的位置,確定了插入位置后,就要看插入的位置的下一條記錄是否有間隙鎖,如果有間隙鎖,就會發(fā)生阻塞,如果沒有間隙鎖,則可以插入成功。

知道了這個結(jié)論之后,我們再回過頭看,非唯一索引等值查詢時,查詢的記錄不存在時,執(zhí)行select * from performance_schema.data_locks\G;輸出的結(jié)果。

在前面分析輸出結(jié)果的時候,我說的結(jié)論是:「事務(wù) A 在 age = 39 記錄的二級索引上(INDEX_NAME: index_age ),加了范圍為 (22, 39) 的 X 型間隙鎖」。這個結(jié)論其實還不夠準確,因為只考慮了 LOCK_DATA 第一個數(shù)值(39),沒有考慮 LOCK_DATA 第二個數(shù)值(20)。

那LOCK_DATA:39,20是什么意思?

LOCK_DATA 第一個數(shù)值,也就是 39, 它代表的是 age 值。從前面我們也知道了,LOCK_DATA 第一個數(shù)值是 next-key 鎖和間隙鎖鎖住的范圍的右邊界值。LOCK_DATA 第二個數(shù)值,也就是 20, 它代表的是 id 值。

之所以 LOCK_DATA 要多顯示一個數(shù)值(ID值),是因為針對「當某個事務(wù)持有非唯一索引的 (22, 39) 間隙鎖的時候,其他事務(wù)是否可以插入 age = 39 新記錄」的問題,還需要考慮插入記錄的 id 值。而LOCK_DATA 的第二個數(shù)值,就是說明在插入 age = 39 新記錄時,哪些范圍的 id 值是不可以插入的。

因此,LOCK_DATA:39,20+LOCK_MODE : X, GAP的意思是,事務(wù) A 在 age = 39 記錄的二級索引上(INDEX_NAME: index_age ),加了 age 值范圍為 (22, 39) 的 X 型間隙鎖,**同時針對其他事務(wù)插入 age 值為 39 的新記錄時,不允許插入的新記錄的 id 值小于 20 **。如果插入的新記錄的 id 值大于 20,則可以插入成功。

但是我們無法從select * from performance_schema.data_locks\G;輸出的結(jié)果分析出「在插入 age =22 新記錄時,哪些范圍的 id 值是可以插入成功的」,這時候就得自己畫出二級索引的 B+ 樹的結(jié)構(gòu),然后確定插入位置后,看下該位置的下一條記錄是否存在間隙鎖,如果存在間隙鎖,則無法插入成功,如果不存在間隙鎖,則可以插入成功。

2、記錄存在的情況

實驗二:針對非唯一索引等值查詢時,查詢的值存在的情況。

假設(shè)事務(wù) A 對非唯一索引(age)進行了等值查詢,且表中存在 age = 22 的記錄。

mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from user where age = 22 for update;+----+--------+-----+| id | name   | age |+----+--------+-----+| 10 | 山治   |  22 |+----+--------+-----+1 row in set (0.00 sec)

事務(wù) A 加鎖變化過程如下:

由于不是唯一索引,所以肯定存在值相同的記錄,于是非唯一索引等值查詢的過程是一個掃描的過程,最開始要找的第一行是 age = 22,于是對該二級索引記錄加上范圍為 (21, 22] 的 next-key 鎖。同時,因為 age = 22 符合查詢條件,于是對 age = 22 的記錄的主鍵索引加上記錄鎖,即對 id = 10 這一行加記錄鎖。接著繼續(xù)掃描,掃描到的第二行是 age = 39,該記錄是第一個不符合條件的二級索引記錄,所以該二級索引的 next-key 鎖會退化成間隙鎖,范圍是 (22, 39)。停止查詢。

可以看到,事務(wù) A 對主鍵索引和二級索引都加了 X 型的鎖:

主鍵索引:

在 id = 10 這條記錄的主鍵索引上,加了記錄鎖,意味著其他事務(wù)無法更新或者刪除 id = 10 的這一行記錄。

二級索引(非唯一索引):

在 age = 22 這條記錄的二級索引上,加了范圍為 (21, 22] 的 next-key 鎖,意味著其他事務(wù)無法更新或者刪除 age = 22 的這一些新記錄,不過對于插入 age = 20 和 age = 21 新記錄的語句,在一些情況是可以成功插入的,而一些情況則無法成功插入,具體哪些情況,會在后面說。

在 age = 39 這條記錄的二級索引上,加了范圍 (22, 39) 的間隙鎖。意味著其他事務(wù)無法插入 age 值為 23、24、..... 、38 的這一些新記錄。不過對于插入 age = 22 和 age = 39 記錄的語句,在一些情況是可以成功插入的,而一些情況則無法成功插入,具體哪些情況,會在后面說。

我們也可以通過select * from performance_schema.data_locks\G;這條語句來看看事務(wù) A 加了什么鎖。

輸出結(jié)果如下,我這里只截取了行級鎖的內(nèi)容。

從上圖的分析,可以看到,事務(wù) A 對二級索引(INDEX_NAME: index_age )加了兩個 X 型鎖,分別是:

在 age = 22 這條記錄的二級索引上,加了范圍為 (21, 22] 的 next-key 鎖,意味著其他事務(wù)無法更新或者刪除 age = 22 的這一些新記錄,針對是否可以插入 age = 21 和 age = 22 的新記錄,分析如下:

是否可以插入 age = 21 的新記錄,還要看插入的新記錄的 id 值,如果插入 age = 21 新記錄的 id 值小于 5,那么就可以插入成功,因為此時插入的位置的下一條記錄是 id = 5,age = 21 的記錄,該記錄的二級索引上沒有間隙鎖。如果插入 age = 21 新記錄的 id 值大于 5,那么就無法插入成功,因為此時插入的位置的下一條記錄是 id = 20,age = 39 的記錄,該記錄的二級索引上有間隙鎖。

是否可以插入 age = 22 的新記錄,還要看插入的新記錄的 id 值,從LOCK_DATA : 22, 10可以得知,其他事務(wù)插入 age 值為 22 的新記錄時,如果插入的新記錄的 id 值小于 10,那么插入語句會發(fā)生阻塞;如果插入的新記錄的 id 大于 10,還要看該新記錄插入的位置的下一條記錄是否有間隙鎖,如果沒有間隙鎖則可以插入成功,如果有間隙鎖,則無法插入成功。

在 age = 39 這條記錄的二級索引上,加了范圍 (22, 39) 的間隙鎖。意味著其他事務(wù)無法插入 age 值為 23、24、..... 、38 的這一些新記錄,針對是否可以插入 age = 22 和 age = 39 的新記錄,分析如下:

是否可以插入 age = 22 的新記錄,還要看插入的新記錄的 id 值,如果插入 age = 22 新記錄的 id 值小于 10,那么插入語句會被阻塞,無法插入,因為此時插入的位置的下一條記錄是 id = 10,age = 22 的記錄,該記錄的二級索引上有間隙鎖( age = 22 這條記錄的二級索引上有 next-key 鎖)。如果插入 age = 21 新記錄的 id 值大于 10,也無法插入,因為此時插入的位置的下一條記錄是 id = 20,age = 39 的記錄,該記錄的二級索引上有間隙鎖。

是否可以插入 age = 39 的新記錄,還要看插入的新記錄的 id 值,從LOCK_DATA : 39, 20可以得知,其他事務(wù)插入 age 值為 39 的新記錄時,如果插入的新記錄的 id 值小于 20,那么插入語句會發(fā)生阻塞,如果插入的新記錄的 id 大于 20,則可以插入成功。

同時,事務(wù) A 還對主鍵索引(INDEX_NAME: PRIMARY )加了X 型的記錄鎖:

在 id = 10 這條記錄的主鍵索引上,加了記錄鎖,意味著其他事務(wù)無法更新或者刪除 id = 10 的這一行記錄。

為什么這個實驗案例中,需要在二級索引索引上加范圍 (22, 39) 的間隙鎖?

要找到這個問題的答案,我們要明白 MySQL 在可重復讀的隔離級別場景下,為什么要引入間隙鎖?其實是為了避免幻讀現(xiàn)象的發(fā)生。

如果這個實驗案例中:

select * from user where age = 22 for update;

如果事務(wù) A 不在二級索引索引上加范圍 (22, 39) 的間隙鎖,只在二級索引索引上加范圍為 (21, 22] 的 next-key 鎖的話,那么就會有幻讀的問題。

前面我也說過,在非唯一索引上加了范圍為 (21, 22] 的 next-key 鎖,是無法完全鎖住 age = 22 新記錄的插入,因為對于是否可以插入 age = 22 的新記錄,還要看插入的新記錄的 id 值,從LOCK_DATA : 22, 10可以得知,其他事務(wù)插入 age 值為 22 的新記錄時,如果插入的新記錄的 id 值小于 10,那么插入語句會發(fā)生阻塞,如果插入的新記錄的 id 值大于 10,則可以插入成功。

也就是說,只在二級索引索引(非唯一索引)上加范圍為 (21, 22] 的 next-key 鎖,其他事務(wù)是有可能插入 age 值為 22 的新記錄的(比如插入一個 age = 22,id = 12 的新記錄),那么如果事務(wù) A 再一次查詢 age = 22 的記錄的時候,前后兩次查詢 age = 22 的結(jié)果集就不一樣了,這時就發(fā)生了幻讀的現(xiàn)象。

那么當在 age = 39 這條記錄的二級索引索引上加了范圍為 (22, 39) 的間隙鎖后,其他事務(wù)是無法插入一個 age = 22,id = 12 的新記錄,因為當其他事務(wù)插入一條 age = 22,id = 12 的新記錄的時候,在二級索引樹上定位到插入的位置,而該位置的下一條是 id = 20、age = 39 的記錄,正好該記錄的二級索引上有間隙鎖,所以這條插入語句會被阻塞,無法插入成功,這樣就避免幻讀現(xiàn)象的發(fā)生。

所以,為了避免幻讀現(xiàn)象的發(fā)生,就需要在二級索引索引上加范圍 (22, 39) 的間隙鎖。

非唯一索引范圍查詢

非唯一索引和主鍵索引的范圍查詢的加鎖也有所不同,不同之處在于非唯一索引范圍查詢,索引的 next-key lock 不會有退化為間隙鎖和記錄鎖的情況,也就是非唯一索引進行范圍查詢時,對二級索引記錄加鎖都是加 next-key 鎖。

就帶大家簡單分析一下,事務(wù) A 的這條范圍查詢語句:

mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from user where age >= 22  for update;+----+-----------+-----+| id | name      | age |+----+-----------+-----+| 10 | 山治      |  22 || 20 | 香克斯    |  39 |+----+-----------+-----+2 rows in set (0.01 sec)

事務(wù) A 的加鎖變化:

最開始要找的第一行是 age = 22,雖然范圍查詢語句包含等值查詢,但是這里不是唯一索引范圍查詢,所以是不會發(fā)生退化鎖的現(xiàn)象,因此對該二級索引記錄加 next-key 鎖,范圍是 (21, 22]。同時,對 age = 22 這條記錄的主鍵索引加記錄鎖,即對 id = 10 這一行記錄的主鍵索引加記錄鎖。由于是范圍查詢,接著繼續(xù)掃描已經(jīng)存在的二級索引記錄。掃面的第二行是 age = 39 的二級索引記錄,于是對該二級索引記錄加 next-key 鎖,范圍是 (22, 39],同時,對 age = 39 這條記錄的主鍵索引加記錄鎖,即對 id = 20 這一行記錄的主鍵索引加記錄鎖。雖然我們看見表中最后一條二級索引記錄是 age = 39 的記錄,但是實際在 Innodb 存儲引擎中,會用一個特殊的記錄來標識最后一條記錄,該特殊的記錄的名字叫 supremum pseudo-record ,所以掃描第二行的時候,也就掃描到了這個特殊記錄的時候,會對該二級索引記錄加的是范圍為 (39, +∞] 的 next-key 鎖。

停止查詢

可以看到,事務(wù) A 對主鍵索引和二級索引都加了 X 型的鎖:

主鍵索引(id 列):

在 id = 10 這條記錄的主鍵索引上,加了記錄鎖,意味著其他事務(wù)無法更新或者刪除 id = 10 的這一行記錄。

在 id = 20 這條記錄的主鍵索引上,加了記錄鎖,意味著其他事務(wù)無法更新或者刪除 id = 20 的這一行記錄。

二級索引(age 列):

在 age = 22 這條記錄的二級索引上,加了范圍為 (21, 22] 的 next-key 鎖,意味著其他事務(wù)無法更新或者刪除 age = 22 的這一些新記錄,不過對于是否可以插入 age = 21 和 age = 22 的新記錄,還需要看新記錄的 id 值,有些情況是可以成功插入的,而一些情況則無法插入,具體哪些情況,我們前面也講了。

在 age = 39 這條記錄的二級索引上,加了范圍為 (22, 39] 的 next-key 鎖,意味著其他事務(wù)無法更新或者刪除 age = 39 的這一些記錄,也無法插入 age 值為 23、24、25、...、38 的這一些新記錄。不過對于是否可以插入 age = 22 和 age = 39 的新記錄,還需要看新記錄的 id 值,有些情況是可以成功插入的,而一些情況則無法插入,具體哪些情況,我們前面也講了。

在特殊的記錄(supremum pseudo-record)的二級索引上,加了范圍為 (39, +∞] 的 next-key 鎖,意味著其他事務(wù)無法插入 age 值大于 39 的這些新記錄。

在 age >= 22 的范圍查詢中,明明查詢 age = 22 的記錄存在并且屬于等值查詢,為什么不會像唯一索引那樣,將 age = 22 記錄的二級索引上的 next-key 鎖退化為記錄鎖?

因為 age 字段是非唯一索引,不具有唯一性,所以如果只加記錄鎖(記錄鎖無法防止插入,只能防止刪除或者修改),就會導致其他事務(wù)插入一條 age = 22 的記錄,這樣前后兩次查詢的結(jié)果集就不相同了,出現(xiàn)了幻讀現(xiàn)象。

沒有加索引的查詢

前面的案例,我們的查詢語句都有使用索引查詢,也就是查詢記錄的時候,是通過索引掃描的方式查詢的,然后對掃描出來的記錄進行加鎖。

如果鎖定讀查詢語句,沒有使用索引列作為查詢條件,或者查詢語句沒有走索引查詢,導致掃描是全表掃描。那么,每一條記錄的索引上都會加 next-key 鎖,這樣就相當于鎖住的全表,這時如果其他事務(wù)對該表進行增、刪、改操作的時候,都會被阻塞。

不只是鎖定讀查詢語句不加索引才會導致這種情況,update 和 delete 語句如果查詢條件不加索引,那么由于掃描的方式是全表掃描,于是就會對每一條記錄的索引上都會加 next-key 鎖,這樣就相當于鎖住的全表。

因此,在線上在執(zhí)行 update、delete、select ... for update 等具有加鎖性質(zhì)的語句,一定要檢查語句是否走了索引,如果是全表掃描的話,會對每一個索引加 next-key 鎖,相當于把整個表鎖住了,這是挺嚴重的問題。

總結(jié)

這次我以MySQL 8.0.26版本,在可重復讀隔離級別之下,做了幾個實驗,讓大家了解了唯一索引和非唯一索引的行級鎖的加鎖規(guī)則。

我這里總結(jié)下, MySQL 行級鎖的加鎖規(guī)則。

唯一索引等值查詢:

當查詢的記錄是「存在」的,在索引樹上定位到這一條記錄后,將該記錄的索引中的 next-key lock 會退化成「記錄鎖」。當查詢的記錄是「不存在」的,在索引樹找到第一條大于該查詢記錄的記錄后,將該記錄的索引中的 next-key lock 會退化成「間隙鎖」。

非唯一索引等值查詢:

當查詢的記錄「存在」時,由于不是唯一索引,所以肯定存在索引值相同的記錄,于是非唯一索引等值查詢的過程是一個掃描的過程,直到掃描到第一個不符合條件的二級索引記錄就停止掃描,然后在掃描的過程中,對掃描到的二級索引記錄加的是 next-key 鎖,而對于第一個不符合條件的二級索引記錄,該二級索引的 next-key 鎖會退化成間隙鎖。同時,在符合查詢條件的記錄的主鍵索引上加記錄鎖。當查詢的記錄「不存在」時,掃描到第一條不符合條件的二級索引記錄,該二級索引的 next-key 鎖會退化成間隙鎖。因為不存在滿足查詢條件的記錄,所以不會對主鍵索引加鎖。

非唯一索引和主鍵索引的范圍查詢的加鎖規(guī)則不同之處在于:

唯一索引在滿足一些條件的時候,索引的 next-key lock 退化為間隙鎖或者記錄鎖。非唯一索引范圍查詢,索引的 next-key lock 不會退化為間隙鎖和記錄鎖。

其實理解 MySQL 為什么要這樣加鎖,主要要以避免幻讀角度去分析,這樣就很容易理解這些加鎖的規(guī)則了。

還有一件很重要的事情,在線上在執(zhí)行 update、delete、select ... for update 等具有加鎖性質(zhì)的語句,一定要檢查語句是否走了索引,如果是全表掃描的話,會對每一個索引加 next-key 鎖,相當于把整個表鎖住了,這是挺嚴重的問題。

關(guān)鍵詞: 查詢條件 查詢語句 小于等于 查詢記錄

相關(guān)新聞

Copyright 2015-2020   三好網(wǎng)  版權(quán)所有 聯(lián)系郵箱:435 22 640@qq.com  備案號: 京ICP備2022022245號-21
少妇被粗大的猛进69视频| 激情九月天在线视频| 色999日韩偷自拍拍免费| 国产精美视频精品视频精品| 青青青在线观看国产| 无人区一码二码三码区别在哪 | 天天看片天天摸天天操| 精久久久久久久久久久久| 亚洲成人自拍图片网站| 精品av天堂毛片久久久| 亚洲中文字幕在线av| 中文字幕人妻一区二区视频系列 | 91亚洲最新蜜桃在线| jiee日本美女视频网站| 亚洲av手机免费在线| 成人午夜av电影网| 在线视频国产精品欧美| 一区二区三区四区 在线播放 | 两个奶被揉得又硬又翘怎么回事| 狠狠干狠狠操免费视频| 天天摸天天干夜夜操| 69久久夜色精品国产69乱电影| 国产主播诱惑毛片av| 午夜福利午夜福利影院| 五十岁熟妇高潮喷水| 夜夜人人干人人爱人人操| 免费中文字幕a级激情| 天堂网成人av电影| 亚洲国产精品一区二区第二页| 久久人妻诱惑我视频| 成人av中文字幕在线看| 最近在线中文字幕免费| 亚洲免费在线不卡视频| 精品人妻在线激情视频| av天堂新资源在线| 豆豆专区操逼性视频在线| 首页欧美日韩中文字幕| 亚成区一区二区人妻熟女| 亚洲国产精品自产拍在线观看| 中文字幕欧美一区二区视频| 天天色天天射天天日天天干| 日韩少妇免费在线播放| 91精品视频在线观看视频| 一区二区三区四区 在线播放| 人妻人妻在线视频网站| 男人的天堂在线2025| 亚洲激情视频在线观看免费| 美国伦理片午夜理论片| 妈妈的朋友2中文字幕在线| 国产免费久久精品99re丫丫| 久草视频在线看免费| 欧美日本国产一区二区| 日本熟女0930视频| 日本国产亚洲欧美色综合| 午夜在线观看一级毛| 加勒比不卡在线视频| 九九视频在线观看全部| 免费在线观看视频啪啪| 天天爱天天日天天爽| 夜夜躁婷婷av蜜桃妖| 91亚洲精品久久蜜桃| 午夜国产一区二区三区| 日韩男女视频网站在线观看| 亚洲乱码av一区二区蜜桃av| lutu玩弄人妻短视频| 精久久久久久久久久久久| 欧美日韩福利视频网| 精产国品一二三77777| 手机视频在线观看一区| 国产激情在线观看一区二区三区| 日韩人妻精品久久久久| 男人av一区二区三区| iga肾三级算严重吗| —区二区三区女厕偷拍| 天堂网成人av电影| 老熟女 露脸 嗷嗷叫| 亚洲一区二区在线激情| 宅男噜噜噜66国产在线观看| 成年人免费福利在线| 骚穴被阴茎插免费视频| 豆豆专区操逼性视频在线| 欧美日韩成人高清中文网| 亚洲第一区av中文字幕| 日本熟女0930视频| 欧美日本国产一区二区| 久久久西西gogo日本美女人体| 久久视频 在线播放| 一区二区三区av免费天天看| 欧美一区二区三区爽爽| 欧洲精品在线免费观看| 新香蕉视频香蕉视频2| 999国产精品视频免费看| 正在播放麻豆精品一区二区| 啪啪啪网站免费在线看| 99久久久久久久久久久久久| 最近在线中文字幕免费| 日本不卡视频一二三区| 免费看超污视频在线观看| 在线免费观看a视频免费 | 人妻激情偷乱一区二区三区av| 午夜宅男电影av网站| 色丁香久久激情综合网| 免费在线小视频你懂的| 久久久久夜色国产精品电影| 国产黄色主播网址大全在线播放| 高清国产美女a一级毛片| v天堂国产精品久久| 天天插天天操天天射天天干| 欧美情色av在线观看| 国产熟妇色xxⅹ交白浆视频| 亚洲熟妇在线视频观看| xxxx69在线观看视频| 美国伦理片午夜理论片| 日韩少妇免费在线播放| 日韩男女视频网站在线观看| av中文字幕国产精品| 午夜情色一区二区三区| 人妻激情偷乱一区二区三区av| 人妻人妻在线视频网站| 在线人成视频免费观看尤物| 韩国毛片w妈妈的朋友7| 欧美不卡一二三区精品| 精品国产久久久久午夜精品av| 成年人免费福利在线| 欧美肥妇久久久久久| 在线观看免费啪啪啪| 区一区二区三免费观看视频| 欧美日韩国产在线中文字幕| 视频在线+欧美十亚洲曰本| 一区二区九日韩美女| 99999久久久精品| 亚洲资源在线免费观看| 自拍偷拍 亚洲性图 欧美另类| 亚洲黄色免费在线观看网站| 色视频在线播放免费观看| 午夜精品视频免费观看| 男人的天堂av中文字幕| av福利免费体验观看| 精品人妻人人做人人爽| 99久久碰碰人妻国产| 天天碰天天摸天天搞| 午夜免费福利老司机| 抽插小穴啊啊啊视频| 亚洲成人欧洲成人在线| 成人午夜麻豆大胆视频| 国产天堂av不卡网| 久久人妻诱惑我视频| 天天色 天天操 天天好逼| 亚洲国内精品久久久久久久| 全国熟妇精品一区二区免费视频| 国产91免费在线观看| 182tv精品免费在线观看| 一二三四区国产在线观看| 宅男噜噜噜66国产在线观看| 青青青在线观看国产| av大尺度一区二区三区| 午夜在线观看一级毛| 不卡在线一区二区三区| 亚洲天堂色综合久久| www,日韩av,com| jizzjizz国产精品传媒| 国产自拍偷拍在线精品| 精产国品一二三77777| 亚洲 偷拍 自拍 欧美| 亚洲欧洲无码一区2区无码| 人妻视频网站快射视频网站| 人妻少妇的va视频| 丰满人妻被猛烈进入中文字幕| 少妇熟女天堂网av| 国产美女主播av在线| 自拍偷拍视频亚洲一区| 欧美视频亚洲视频在线| 亚洲av三级电影在线观看| 精品一区二区三区免费毛片W| 天天看天天爱天天日| 在线观看视频免费一区二区三区| 精产国品一二三产品区别97| 亚洲色大WWW永久网站| 午夜久久久久欠久久久久| 亚洲成人五月婷婷久久综合| 96在线观看免费播放| 亚洲18片综合国产av| 另类欧美激情校园春色| 夜夜爽夜夜操夜夜爱| 亚洲午夜熟女在线观看| 91超精品碰国产在线观看| 欧美视频免费观看777| av 一区二区三区 熟女| 日本成人福利电影网| 在线视频自拍第三页| 色网站在线观看免费| 伊人网国产在线播放| 国产漂亮白嫩美女在线图片| 91精品久久久久久久99蜜月| 亚洲码av一区二区三区| 欧美黄色性视频网站| 一区二区三区av免费天天看| 欧美日韩久久丝袜在线| 中文字幕欧美一区二区视频| 亚洲一区二区精品在线播放| 国产一区两区三区福利小视频| 伦理在线观看未删减中文字幕| 大成色亚洲一二三区| 中文字幕熟女人妻丝袜丝在线| 日韩激情文学在线视频| 熟女阿高潮合集一区二区| 五月天天堂视频在线| jiee日本美女视频网站| 国产精品福利久久久久| 国产精品性感美女视频| 黄很色很在线免费视频网站| 免费中文字幕a级激情| 91久久久精品成人国产| 久久av色噜噜ai换脸| 婷婷一区二区三区五月丁| 成人精品影视一区二区| 日韩激情亚洲国产欧美另类激情| 91性高湖久久久久久久久久| 少妇被中出一区二区| 99久久久久久久久久久久久| 亚洲精品激情视频在线观看| 性感美女人妻久久久| 放荡人妻极品少妇全集| 女人的天堂av在线网| 免费观看在线中文字幕视频| 国语精品视频自产自拍| 极品风骚人妻3p视频| 一区二区欧美 国产日韩| 欧美一区二区三区爽爽| 91精品国产成人久久久久久| ass亚洲熟女ass| 92午夜免费福利视频www| 国产精品免费看一区二区三区| 日本一区二区高清av中文| av在线播放观看h| 午夜精品久久久久久久久久蜜桃| 日本东京热最新中文字幕| 内地精品毛片在线观看| 美女网站视频久久精品| 绿巨人浩克在线视频观看| 一区二区三区四区 在线播放| 天堂在线中文字幕av| 欧美aaaa性bbbbaaaa| 亚洲精品综合欧美精品综合| 4438全国成人免费视频| 欧美成人少妇人妻精品| 91青青青国产免费高清| 福利小视频免费在线| 亚洲男人天堂最新网址大全| 欧美日韩黄片免费在线观看| 公侵犯人妻中文字幕巨| 偷拍欧美日韩另类图片| 黄片操操操操操操c| 两个人在一起靠逼啊啊啊| 无人区一码二码三码区别在哪| 裸露视频免费在线观看| 亚洲一区二区精品三区视频| 97精品国产91久久久| 亚洲免费在线不卡视频| 最新激情中文字幕视频| 亚洲国产精品自拍偷拍视频在线 | 99亚偷拍自图区亚洲| 自拍偷拍 国产激情| 欧美在线视频不卡一区| 亚洲美女黄色福利视频网站大全| 中文字幕人妻一区色偷偷久久| 亚洲熟女人妻自拍在线视频| 熟女一区二区视频在线| 大秀成年人国产精品视频| yy4080黄色片| 亚洲中文字幕最新地址| 婷婷色综合五月天视频| 国产资源网站在线播放| 国产亚洲综合5388| 97人妻人人揉人人躁人人夜夜爽| 国产福利小视频在线观看网站| 天天干夜夜撸天天操| ysl蜜桃色7425| 东京热日本一区二区三区| 91亚洲精品久久蜜桃| 久久内射天天玩天天懂色| 国产黑色丝袜 在线日韩欧美| 三区美女视频在线观看| 在线视频自拍第三页| 裸日本资源在线午夜| 91人妻人人做人人爽高清| 91人妻人人做人人爽高清| 少妇被中出一区二区| 蜜臀一区二区日韩美女少妇视频| 女同性恋av在线播放| 91精品一区一区三区| 日本五六十路熟女视频| 99 re国产精品| 91麻豆精品国产在线| 九九热在线精品播放| 一二区二区不卡视频| 日韩激情文学在线视频| 不卡一二三区别视频| 亚洲欧美一级特黄大片| avgo成人短视频| 成人午夜高清福利视频| 91污污在线观看视频| 亚洲免费午夜污福利| 18在线观看免费观看| 户外露出视频在线观看| 人妻少妇精品二三区| 松本菜奈实最新av在线| 午夜野花视频在线观看| 五月婷婷伊人久久中文字幕| 中文字幕亚洲无线乱码| 一区二区三区国产在线成人av| 欧美成人屋影院在线视频观看| 中文字幕在线免费观看人妻| 亚洲av综合av一去二区三区| 91大神福利视频网| 久久久久九九九九九12| 黑人侵犯人妻森泽佳奈| 中文字幕日本一二三区| 99久久久久久久久久久久久| 青青操91美女国产| 夜色福利视频免费观看| 黄色网络中文字幕日本| 亚洲精品色图1234| 久99久视频免费观看中文字幕| 91精产国品一二三产区区别网站| 97视频人人爱麻豆| 亚洲欧美激情国产综合久久久| 日韩在线 中文字幕| 中文字幕观看中文字幕免费 | 熟女人妻aⅴ一区二区三| 欧美激情视频第一页| 成人av在线视频免费| 最新日韩中文字幕免费在线观看| 男人的天堂aⅴ在线| 黑川堇人妻88av| 天天干天天弄天天日| 中文字幕观看中文字幕免费 | 一区二区三区不卡免费视频网站| 成年人黄色日本视频| 美国伦理片午夜理论片| 夜夜爽夜夜操夜夜爱| 中文字幕综合网91| 手机看片福利一区二区三区四区| 青青草一个释放的网站| 男女69视频在线观看免费| 日韩三级黄色大片在线观看| av日韩视频在线观看| 亚洲中文字幕最新地址| 日本老熟妇av老熟妇| 国产在线观看一区二区三区四区| 久久99嫩草99久久精品| 不卡一区二区视频在线| 亚洲第一区av中文字幕| 亚洲男人的天堂最新网址| 新香蕉视频香蕉视频2| 日本韩国福利在线播放| 性色蜜桃臀x88av天美传媒| av 资源在线播放| 日韩欧美一区二区三区免费看 | 黄片操操操操操操c| 后入日韩翘臀蜜桃臀美女| 一级做性色a爱片久久片| 久久99久久99久久97的人| 成人人妻h在线观看| 人妻系列级片在线观看视频| 亚洲精品国产99999| 亚洲国产日韩精品在线| 一区二区三区免费版在线| 日本福利网站一区二区| 亚洲一区二区在线激情| 青青免费观看视频| 色视频在线播放免费观看| 欧美精品乱码99久久蜜桃免费| 男女真人做带声音视频图片| 亚洲欧美日韩中文视频| 中文字幕欧美一区二区视频| 中文字幕免费啪啪啪| 乱子伦国产一区二区三区 | 天堂网成人av电影| 91麻豆精品国产在线| 黑吊操欧美极品美女| 女人扒开逼让男人操| 91精品在线视频免费视频| 亚洲av手机免费在线| 有码一区二区三区四区五区| 伊人网在线欧美日韩在线| 亚洲午夜精品视频节目| 欧美在线观看一区二区不卡| 红桃视频国产av在线| 人人人妻人人人妻精品少妇| 日本高清有码在线视频| 人妻免费视频黄片在线视频| 午夜情色一区二区三区| 狠狠操狠狠操狠狠插| 99免费观看在线视频| 不卡一区二区视频在线| 色欲天天媓色媓香视频综合网| 精品高潮呻吟久久av| 在线 激情 亚洲 视频| 91在线九色porny| 精品国产av虐杀两警花| 色哟哟亚洲乱码国产乱码精品精| 黑人侵犯人妻森泽佳奈| 国产亚洲综合5388| 亚洲中文字幕无线乱码人妻精品| 69视频在线精品国自产拍| lutu玩弄人妻短视频| 青青青在线视频观看97| 日本欧美高清在线观看视频| 福利在线国产小视频| 亚洲美女午夜激情视频在线观看| 中文字幕国产一区在线视频| 久久久久性感美女偷拍视频| 91大神在线免费观看视频| av一区二区三区蜜桃| 大奶熟妇激情操逼逼| 交换的一天中文字幕在线视频| 91大神福利视频网| 日韩av水蜜桃一区二区三区| 少妇被中出一区二区| 欧美日韩成人高清中文网| 精品国模一区二区三区欧美 | 日本老熟老熟妇七十路| 杜达雄啪啪毛片视频| 午夜野花视频在线观看| 操死你美女在线视频| 欧美成人区一区二区三| 久久无码高清免费视频| 加勒比东京热绿帽人妻多人操| 中国特黄色性生活片| 日本老熟妇av老熟妇| 青青草成人免费自拍视频| 超级黄肉动漫在线观看| 中文字幕av人妻一区二区三区 | 最新久久这里只有精品| 日韩男女视频网站在线观看| 男女爱爱好爽视频免费看| av在线播放观看h| 日韩人妻精品久久久久| 91色乱一区二区三区| 高潮喷水在线视频观看| 精品高潮呻吟久久av| 国产一区两区三区福利小视频| 黑人黄色免费一级av| 久久久久性感美女偷拍视频| 69国产在线视频网站| 免费在线小视频你懂的| www一区二区91| 久久无码高清免费视频| 亚洲激情噜噜噜久久久| 亚洲天堂色综合久久| 亚洲另类激情视频在线看| 久久久亚洲综合国产精品| 天天看片天天摸天天操| 天天日 天天舔 天天射| 白白色在线免费视频发布视频| 岛国av成人午夜高清| 91福利高清在线播放| 国产免费久久精品99re丫丫| 亚洲第一页欧美第一页| 中国特黄色性生活片| 精品不卡一区二区三区| 荣立三等功退休有什么待遇| 日韩人妻中文字幕区| a级片特黄免费看| 最新日韩中文字幕免费在线观看| 99久久久久久久久久久久久| 久久久久久久精品乱码| 午夜精品久久久久久久久久蜜桃| 日本欧美高清在线观看视频| 亚洲av三级电影在线观看| 免费高清av一区二区| 天天弄天天草天天日天天| 老司机免费视频福利0| 玖玖资源站在线观看亚洲| 国产视频1区2区3区| 欧美肥妇久久久久久| 可在线免费观看av| av男人站在线观看| 开心激情五月天作爱片| 亚洲综合熟女乱中文| 黄色片免费国产精品| 亚洲精品色图1234| 91精品综合久久久久久五月天| 国产igao激情在线视频入口| 69国产精品成人aaaaa片| 夜色福利视频免费观看| 一区二区三区四区久久久久韩日 | 久久久久高潮白浆久久| 天天夜夜久久精品综合| 精品国产无乱码一区二区三区| 人妻少妇视频系列视频在线| 亚洲精品中文字幕手机在线免费看| 99999久久久精品| 38av一区二区三区| 国语对白性爱三级片免费看| 夜夜操夜夜爱夜夜摸| 午夜美女福利视频在线| 上床啪啪啪免费视频| 女生抠逼自慰啊啊啊啊啊啊啊下载| 欧美极品少妇高潮喷水| 老司机在线视频福利观看| 久久久人妻免费视频| 亚洲码av一区二区三区| 东京热日韩av在线| 亚洲黑人欧美二区三区| 久久精品久久久久观看99水蜜桃| www一区二区91| 熟妇人妻av无码中文字幕| 黑人侵犯人妻森泽佳奈| 人妻色综合aaaaaa网| 99999久久久精品| 日本特级黄片免费观看| 美女黄色啊啊啊啊视频| 中字幕人妻熟女人妻a62v网| 91中文字幕视频网站| 黄版视频在线免费观看| 福利视频导航在线观看| 欧美亚洲精品色图网站| 九色porny91国产| 在线看的免费网站黄| 欧洲亚洲一区二区三区四区| 国产av在线免费视频| 国产,亚洲,欧美综合| 亚洲国产综合久久精品| 天天爱天天日天天爽| 久久久久国产精品二区| 美女一区二区四区六区八区| 麻豆白洁少妇在线播放| 天天干夜夜操夜夜骑| 午夜精品久久久久久久精品乱码| 亚洲av中文无码网站| 黄色大片一级老太太操逼| 日韩av熟妇在线观看| 亚洲精品国产99999| 公侵犯人妻中文字幕巨| 干逼又爽又黄又免费的视频| 日韩激情文学在线视频| 亚洲欧美激情国产综合久久久| 自拍丝袜国产欧美日韩| 3344永久在线观看视频下载| 久久久亚洲熟女一区二区| 麻豆出品视频在线观看| 91精品国产成人久久久久久| 亚洲无码专区中文字幕专区| 亚洲午夜熟女在线观看| 国产精品午夜无码AV体验区| 青青国产95免看视频| 网站在线观看蜜臀91| 久操资源在线免费播放| 夫妻黄色一级性生活片| 抽插小穴啊啊啊视频| 偷拍熟女大胆免费视频| 亚洲人人爽人人澡起碰av| 国产视频成人自拍蝌蚪视频| 无码精品黑人一区二区老人 | 最近最新最好看的中文字幕| 亚洲蜜桃久久久久久| 女人高潮潮呻吟喷水网站| 视频在线 一区二区| 91系列视频在线播放| 瑟瑟干视频在线观看| 1区3区4区产品乱入视频| 一区二区三区午夜福利在线| 黑人大吊大战亚洲女人。| 亚洲欧美成人午夜一区二区| 松本菜奈实最新av在线| 久久一级片三上悠亚| 69视频在线精品国自产拍| 午夜精品秘一区二区三区| 亚洲成人 国产精品| 特级aaaaa黄色片| 天天插天天操天天射天天干| 免费中文三级在线观看| 国产一区二区三区四区精| 999精品视频免费在线观看| 4日日夜夜精品视频免费| 亚洲国产日韩a在线欧美| 最新中文字幕久久久久| 亚洲一区二区偷拍女厕所| 婷婷一区二区三区五月丁| 国产漂亮白嫩美女在线图片| 久久久久久免费观看av| 欧美成人一二三在线网| 国产伦理二区三区在干嘛呢| 91偷拍被偷拍在线播放| 欧美精品熟妇免费在线| 抽插小穴啊啊啊视频| 天天操天天舔天天做| 欧美精品熟妇免费在线| 公侵犯人妻中文字幕巨| 亚洲欧美小说中文字幕| 精品日本少妇久久久| 亚洲精品一区二区gif| 瑟瑟干视频在线观看| 一级做性色a爱片久久片| 日本一本午夜在线播放| 91九色国产在线视频| 青青草原在线播放日韩| 91精品在线视频免费视频| 9久re热视频在线精品 | 久久久久久高清一区| 骚穴被阴茎插免费视频| 久久热在线免费观看| 中文字幕福利视频第四页| 激情九月天在线视频| 国语精品视频自产自拍| 男人和女人的逼视频| 大秀成年人国产精品视频 | 99久久久久久久久久久久久| 91国产精品乱码久久久久久| 最新日韩中文字幕啪啪啪| 亚洲精品综合欧美精品综合| 黑人3p日本女优中出| 亚洲欧美一级特黄大片| 全球高清中文字幕av| 青青操久久综合激情| 中文字字幕在线精品乱码| 美女激情久久久久久久| 精品一区二区三区免费毛片W| 午夜精品秘一区二区三区| 亚洲 偷拍 自拍 欧美| 亚洲美女午夜激情视频在线观看| 国产av高清二区三区| 黑人大巨屌操美女逼| 大香焦一道本一区二区三区| 九九热在线精品播放| 99精品久久精品一区二区| 68视频在线免费观看| 91精产国品一二三产区区别网站 | 91亚洲最新蜜桃在线| 亚洲AV无码一二三四区在线播放| 亚洲无码专区中文字幕专区| 3344永久在线观看视频下载| 亚洲国内精品久久久久久久| 日本少妇人妻中文在线| 大香蕉尹人在线最新| 一区二区三区av免费天天看| 伊人网在线欧美日韩在线| 亚洲av日韩久久网站| 成熟了的熟妇毛茸茸| 97视频538在线观看| 日韩一级视频一区二区三区| 久久综合狠狠综合久久综| 182tv精品免费在线观看| 日韩少妇免费在线播放| 黄片视频免费观看视频| 999精品视频免费在线观看| 国产人妻熟女ⅹxx丝袜| 成熟了的熟妇毛茸茸| 自拍偷拍亚洲综合第一页| 亚洲乱熟女一区二区三区山| 大片a免费观看在线视频观看| 开心五月综合激情婷婷| 日本老熟妇av老熟妇| 色丁香久久激情综合网| 天天干夜夜爽狠狠操| 天天碰天天摸天天搞| 韩国毛片w妈妈的朋友7| 青青在线免费手机播放视频| 大陆中文字幕视频在线| 福利在线国产小视频| 91亚洲国产成人久久精品| 在线 制服 中文字幕 日韩| av一区二区三区蜜桃| 天天操天天干天天谢| 中文字幕av特黄毛片| xxxx69在线观看视频| 正在播放麻豆精品一区二区 | 中文字幕av特黄毛片| 成人免费电影二区三区| 蜜乳av一区二区三区免费观看| 青娱乐免费最新视频| 欧美一区二区播放视频| 大香蕉尹人在线最新| 爱搞视频在线观看视频91| 大秀成年人国产精品视频| 日韩在线 中文字幕| 人人妻人人狠人人爽| 天天干天天色综合久久| 国产男女无套?免费网站下载| 一区二区欧美 国产日韩| 国际日韩日韩日韩日韩日韩| 亚洲精品一区二区gif| 韩国资源视频一区二区三区| 蜜臀一区二区日韩美女少妇视频| 亚洲欧美另类丝袜另类自拍 | 欧美vs亚洲vs日韩| 91超精品碰国产在线观看| 亚洲最大先锋资源采集站| 干逼又爽又黄又免费的视频| 汤姆提醒30秒中转进站口| 天堂一区二区三区在线等| 天天操天天舔天天做| 亚洲综合一区二区三区四区| 日本免费人爱做视频在线观看不卡| 亚洲午夜熟女在线观看| 最新福利二区三区视频| 天天操天天日天天碰| 九九热在线精品播放| 国产毛片特级Av片| 乱子伦国产一区二区三区| 男人和女人的逼视频| 九九九九九久久久国产| 老牛影视在线一区二区三区| 亚洲熟女乱一区二区精品成人| 久久精品久久久久观看99水蜜桃| 55夜色66夜色亚洲精品| 97cao在线视频| 美女张开腿给男人桶爽的软件| 午夜国产免费视频亚洲| 国产一区两区三区福利小视频| 日本少妇人妻凌辱在线| 大香蕉伊人97在线| 女同大尺度视频网站在线观看| 国产原创一区二区三区在线播放| 老司国产精品视频免费观看| 日本东京热最新中文字幕| 亚洲三级综合在线观看| 国产视频1区2区3区| 高清欧美色欧美综合网站| 韩国毛片w妈妈的朋友7| 在线免费观看欧美小视频| 最新福利二区三区视频| 免费成人av麻豆| 中国精品人妻一区二区| 97精品久久久久久无码人妻| 伊人网在线观看 视频一区 | 最新久久这里只有精品| 国产人妻777人伦精品hd超碰| 中文字幕人妻一区色偷偷久久| 精品国产av虐杀两警花| 老熟女 露脸 嗷嗷叫| 荣立三等功退休有什么待遇| 国产白丝一区二区三区av| 国产高清自拍偷拍在线| 国产91免费在线观看| av天堂hezyo| 亚洲欧美成人午夜一区二区| 日本成人福利电影网| 亚洲熟女人妻自拍在线视频| 亚洲精品乱码久久久久app| 激情九月天在线视频| 在线 激情 亚洲 视频| 日本人妻熟妇丰满成熟HD系列| 亚洲欧洲一区二区三区在线| 凹凸视频一区二区在线观看| 欧美插插插插插插| 久久热在线免费观看| 国产资源网站在线播放| 啊不行啊操逼好爽大鸡吧视频 | 69精品互换人妻4p| 青青青在线视频观看97| 国产探花自拍亚洲av| 午夜精品久久秘?18免费观看| 亚洲无人区乱码中文字幕一区| 日本高清激情乱一区二区三区| 国产精品网站的黄色| av 资源在线播放| 鸡巴在里面福利视频在线观看| 熟妇人妻丰满久久久久久久| 精品视频在线观看免费99| 一区二区三区四区 在线播放 | 中文字幕在线观看亚洲情色| 操操操操操操操操操网| 人妻被强av系列一区二区| 亚洲va999天堂va| 亚洲av日韩久久网站| 在宿舍强奷两个清纯校花| 最新久久这里只有精品| 先锋人妻啪啪中文字幕| 亚洲成人三级黄色片| 久久sm人妻中出精品一区二区| 91九色国产在线视频| 男女69视频在线观看免费| 国产天堂av不卡网| 精品国产无乱码一区二区三区 | 插鸡视频免费网站在线播放| 一区二区三区五区六区| 中文字幕观看中文字幕免费 | 丰满少妇_区二区三区| 人妻系列中文字幕大乳丰满人妻 | 美女激情久久久久久久| 中文字幕在线观看av观看| 色视频免费观看网址| 亚洲人人爽人人澡起碰av| 一区二区三区国产在线成人av| 久久久久久a女人处女| 4438x亚洲最大的成人| 大香焦一道本一区二区三区| 天天爱天天日天天爽| 天天操天天搞天天操| 一二三四区国产在线观看| 无码精品黑人一区二区老人| 国产精品剧情在线亚洲| 性感人妻 中文字幕| 男插女视频大全免费| 西野翔人妻中文字幕中字在| 欧美极品少妇高潮喷水| 中文字幕亚洲无线乱码| 欧美在线视频不卡一区| 夜夜骚av一二三区| 99精品久久99久久久久一| 亚洲一区二区三区无码在线| 久久久久夜色国产精品电影| 日韩成人免费观看电影| 欧美熟女xx00视频| 91色哟哟视频在线观看| 一区二区三区五区六区| 可以直接看av网站| 久久人妻诱惑我视频| 精品不卡一区二区三区| 人妻激情偷乱一区二区三区av| 国产精品内射婷婷一级| 最新日韩av电影在线播放 | 亚洲av毛片在在线播放| 亚洲国产精品 久久久| 大乳人妻一区二区三区| 啪啪啪网站免费看视频| 一区二区三区免费版在线| 色丁香久久激情综合网| 一区二区三区午夜福利在线| 日本五六十路熟女视频| 国产精品igao为爱寻找激情| 丝袜美腿日韩av一区| 二十四小时日本高清在线观看| 欧美亚洲精品色图网站| 中文字幕av人妻一区二区三区| 欧美日本亚欧在线观看| 大香焦一道本一区二区三区| 国产成人av在线你懂得| 性色蜜桃臀x88av天美传媒| 91佛爷视频在线观看| 国产亚洲精品啪啪视频| 亚成区一区二区人妻熟女| 亚洲成人三级黄色片| 亚洲一区二区中文字幕久久| 老熟女xxxⅹhd老熟女性| 亚洲熟女乱色一区二区三区视频| 精品一区二区三区免费毛片W| 伊人久久综合国产精品| 91在线九色porny| 成人精品动漫一区二区| 91精品国产欧美在线| 天天干夜夜撸天天操| avjpm亚洲伊人久久| 久久99精品久久久久久三级| 国产精品性感美女视频| 4438全国成人免费视频| 女人高潮潮呻吟喷水网站| 国产女人18毛片水真多精选| 高潮喷水在线视频观看| 在线观看免费啪啪啪| 激情久久在线免费观看视频| 77亚洲视频在线观看| 久久99热精品免费观看视| 男人av一区二区三区| 伊人免费观看视频一 | 日本东京热最新中文字幕| 国产大桥未久一区二区| 日本东京热视频欧美视频| 亚洲欧美精品海量播放 | 91 精品视频在线看| 久久久人妻免费视频| 日本国产亚洲欧美色综合| 91系列视频在线播放| 亚洲色图日韩在线视频观看| 色999日韩偷自拍拍免费| 一二三四区国产在线观看| 日本欧美视频在线免费| 美女激情久久久久久久| 一区二区欧美 国产日韩| 日本熟妇乱妇熟色视频| 亚洲一区二区三区无码在线| 宅男噜噜噜66国产在线观看| 欧美成人红桃视频在线观看| 天天想要天天操天天干| 欧美成人久久久桃色aa| 第一福利视频在线观看| 亚洲18片综合国产av| 女女抠逼白虎白丝袜| 日本黄色一级电影网址| 黄版视频在线免费观看| 精品国产污污污免费入口| 后入日韩翘臀蜜桃臀美女| 国产精品久久久久精品三级18| 91日本精产品一区二区三区| 午夜92福利1000| 国际日韩日韩日韩日韩日韩| 美国男的操女孩的小嫩逼| 亚洲国产美女主播在线观看| 国产成人av在线你懂得| 午夜福利午夜福利影院| 熟女人妻aⅴ一区二区三| 天天碰天天摸天天搞 | 女生裸体视频免费网站| 人妻少妇精品二三区| av中文字幕国产精品| 松本菜奈实最新av在线| 日韩人妻一区二区三区在线观看| 91麻豆精品国产在线| 夜夜操夜夜爱夜夜摸| 美国男的操女孩的小嫩逼| 老司机免费视频福利0| 97精品国产91久久久| 亚洲国产日韩欧美一区二区三区,| 大香蕉在线欧美在线视频| 免费高清av一区二区| 麻豆国产精品777777在| 98热视频精品在线观看| 丰满少妇人妻一区二区三区蜜桃| 东京热日韩av在线| 欧洲精品在线免费观看| 黑人和日本人av一区二区| 1区3区4区产品乱入视频| 少妇被中出一区二区| 99久久免费播放在线观看视频| 91精品国产欧美在线| 97人妻av人人澡人人爽| alisontyler和黑人| 岳的大肥屁熟妇五十路| 美利坚合众国av天堂| 婷婷综合缴情亚洲五月伊人| 日韩av熟妇在线观看| 狠狠干狠狠操免费视频| 中文字幕福利视频在线一区| 五月天天堂视频在线| 松本菜奈实最新av在线| 在线观看免费啪啪啪| yy4080黄色片| 一区二区三区资源视频| 99亚偷拍自图区亚洲| 日本老熟妇av老熟妇| 视频自拍偷拍视频自拍 | 午夜情色一区二区三区| 91精品夜夜夜一区二区| 99国产精品国产精品毛片19| 外国美女舔男人坤坤| 亚洲最大先锋资源采集站| av无限看熟女人妻另类av| 日韩国产欧美一区二区三区粉嫩| av天堂hezyo| 久久99嫩草99久久精品| 特级aaaaa黄色片| 亚洲一区二区精品三区视频| 色屁屁一区二区三区在线观看| 天天做天天日天天搞| 国产精品剧情在线亚洲| 亚洲天堂av最新在线| 97人妻在线视频自拍| 午夜福利国产精品久久久久 | 伦理在线观看未删减中文字幕| 亚洲人人爽人人澡起碰av| 国产av嗯嗯啊啊av| 欧美性受黑人猛交裸体视频| 天堂av在线最新地址| 夜色17s精品人妻熟女av| 五月在线视频免费播放91| 婷婷综合缴情亚洲五月伊人| 精产国品一二三产品区别91| 国产大桥未久一区二区| 天天躁狠狠躁狠狠躁性色| 午夜精品老牛av一区二区三区| 自拍偷拍 国产激情| 亚洲成人五月婷婷久久综合| 成人18禁高潮片免费日本| 天天日夜夜操人人爽| 91精品视频在线观看视频| 天天操天天日天天碰| 亚洲三级综合在线观看| 松本菜奈实最新av在线| 午夜久久人妻一级内射av网址| av一区二区三区蜜桃| 强乱人妻中文字幕日本| 亚洲成人中文无码在线| 国产av啊啊啊啊啊啊啊| 国产成人深夜福利短视频99| 川上优所有中文字幕在线| 性色蜜桃臀x88av天美传媒| 91精品麻豆91夜夜骚| 久久久亚洲熟女一区二区| 人妻激情综合久久久久蜜桃| 亚洲欧美激情久久久| 大屁股熟女一区二区视频| 中文字幕一区二区三区久久久| 精品人妻在线激情视频| 天堂av国产av伦理av| 精品人妻人人做人人爽| 一区二区三区四区 在线播放| av天堂hezyo| 黑鸡巴肏少妇逼视频| 婷婷六月天在线视频| 农村大炕有肉大屁股熟妇| 蜜乳视频一区二区三区| 人妻色综合aaaaaa网| 韩国一级片最火爆中文字幕| 伊人免费观看视频一| 国语精品视频自产自拍| 亚洲av三级电影在线观看| yy4080黄色片| 操烂你的骚逼天天欧美| 性高潮视频在线观看日韩| xxxx69在线观看视频| 亚洲情色777中文字幕| 韩国在线播放一区二区三区| 国产黑色丝袜 在线日韩欧美| 国产免费久久精品99re丫丫| 夏目彩春av在线看| 美女网站视频久久精品| 亚洲一区二区三区无码在线| 亚洲在线免费观看18| 深夜福利免费观看在线看| 欧美日韩国产在线中文字幕| 9999久久久久老熟妇二区| 首页欧美日韩中文字幕| 97精品国产91久久久| 夏目彩春av在线看| 天天色 天天操 天天好逼| 69视频在线精品国自产拍| 三级欧美日韩一区二区三区| 国产精品国产三级在线高清观看| 精品久久久久久久久久久久久 | 新亚洲天堂男子av| 99久久国语露脸国产精品| 九九热在线精品播放| 国产精品久久久久久成人久| 亚洲综合首页综合在线观看 | 黄色片黄色片黄色片黄色片黄色| 国产精品剧情在线亚洲| 日本亚洲午夜福利一区二区三区| xxnxx国产美女| 中文字幕亚洲乱码精品无限| 亚洲少妇视频在线观看| 亚洲av三级电影在线观看| 乌克兰美女操逼高清内射视频| 日本成年视频在线免费观看| 日本香港韩国三级黄色| 欧美一区二区三区爽爽| 天堂网成人av电影| 精品不卡一区二区三区| 日本成年视频在线免费观看| 欧美最新一区二区三区| 国产肥胖熟女又色又爽免费视频| 欧美视频免费观看777| 5d蜜桃臀女无痕裸感| 亚洲av手机免费在线| 在线看的免费网站黄| 欧美黄色性视频网站| 欧美在线视频不卡一区| 亚洲乱熟女一区二区三区山| 看女人大BB群伦交| 91久久精品美女高潮喷水白浆| 色视频在线播放免费观看| 丰满少妇高潮喷水视频| 福利视频免费在线播放| 亚洲精品中文字幕手机在线免费看| 国产成人综合久久婷婷| 亚洲精品国品乱码久久久久| av成人三级高清日韩| 青青操天堂在线观看视频| 啊~插得好快别揉我胸了视频| 中文字幕观看中文字幕免费 | 玖玖资源站在线观看亚洲| 久久久国产精品免费视频网| 男插女视频大全免费| 色屁屁一区二区三区在线观看| 天天干夜夜撸天天操| 亚洲国产美女主播在线观看| av天堂hezyo| 亚洲人成大片在线观看| 国产精品剧情av在线播放| 日本不卡 中文字幕| 亚洲男人的天堂最新网址| 麻豆出品视频在线观看| 河北全程露脸对白自拍| 黑吊操欧美极品美女| 美女av色播在线播放| 在线免费观看视频18| 九十九步都是爱最后一步是尊严| 蜜桃臀少妇白色紧身裤细高跟| 亚洲欧美一级特黄大片| 精品国产无乱码一区二区三区 | 99亚偷拍自图区亚洲| a级黄片免费观看| 亚洲一区二区精品在线播放| 天天日 天天舔 天天射| 欧美啪啪一区二区三区| 色老头一区二区三区四区五区| 久久国产精品久精国产爱 | 久99久视频免费观看中文字幕| 一区二区在线观看视频网站| 欧美三区四区在线视频| 国产亚洲精品啪啪视频| 午夜8050免费小说| 亚洲a区在线免费观看| 丰满人妻熟女aⅴ一区| 东北老女人熟女啪啪视频| 成人做爰av在线观看网站| 久草久热这里只有精品| 最新日韩中文字幕免费在线观看| 放荡人妻极品少妇全集| 国产中文亚洲熟女日韩| 大乳丰满人妻中文字幕韩国hd| 国际精品熟女一区二区| av毛片在线观看网址| 亚洲码av一区二区三区| 午夜3p福利视频合集| 亚洲第一成年偷拍视频| 亚洲av三级电影在线观看| 午夜一区二区三区视频在线观看| 又粗又长又硬又黄又爽| 亚洲少妇色小说综合| 欧美插插插插插插| 60路70路日本熟妇| 国产美女视频带a∨黄色片| 中文字幕 首页 人妻| 免费在线观看视频啪啪| 国产精品免费看一区二区三区| 99久久免费播放在线观看视频| 亚洲成人激情在线综合| 国产精品国产三级在线高清观看| 国语对白性爱三级片免费看| 亚洲一区视频中文字幕在线播放 | 天天碰天天摸天天搞| 超碰在线免费观看视频97| 国际精品熟女一区二区| av在线男人的天堂亚洲| lutu玩弄人妻短视频| 福利在线国产小视频| 强乱人妻中文字幕日本| 91精品资源在线观看| 欧美猛少妇色ⅹⅹⅹⅹⅹ猛叫| 欧美日韩黄片免费在线观看| 男生用大肌巴操美女骚穴| 五月婷婷激情视频网| 插鸡视频免费网站在线播放| 美女网站视频久久精品| 日韩一级欧美一级片| 亚洲韩精品一区二区三区| 亚洲a区在线免费观看| 在线观看中文字幕视频成人| 最新日韩av电影在线播放| 在线观看视频免费一区二区三区| 少妇精品视频一区二区免费看| 国产清纯一区二区在线观看| 婷婷色九月综合激情丁香| 女同性恋av在线播放| 最新福利二区三区视频| 黄色av网址在线播放| 欧美成人性生活视频播放| 欧美操大黑鸡巴视频在线观看| 欧美精品999不卡| 可在线免费观看av| 夫妻黄色一级性生活片| 日本一区二区三区区别| 亚洲精品中文字幕手机在线免费看| 黄色片免费网站在线| 亚洲精品综合欧美精品综合| 伊人网在线观看 视频一区| 亚洲综合首页综合在线观看| 中文字幕福利视频第四页| 亚洲精品综合欧美精品综合| 欧美成人屋影院在线视频观看| 放荡人妻极品少妇全集| 日本人妻熟妇丰满成熟HD系列| 亚洲精品乱码久久久久app| 久久久久夜色国产精品电影| 凹凸视频一区二区在线观看| 中文字幕人妻一区二区视频系列| 9420高清视频在线观看国语版| 福利视频免费在线播放| 中文字幕久久久国产| 人妻少妇视频系列视频在线| 精品国产久久久久午夜精品av| 女女抠逼白虎白丝袜| 国产成人91色精品免费看片| 老司机伊人99久久精品| 中文字幕日韩人妻在线三区| 福利在线国产小视频| 国产美女视频带a∨黄色片| 老熟妇一区二区三区v∧88| 欧美日本亚欧在线观看| 天天日 天天舔 天天射| 欧美男男在线观看视频网站| 黄色大片一级老太太操逼 | 中文字幕欧美人妻在线.| 黄片操操操操操操c| 亚洲欧美日韩中文在线观看| 日本亚洲午夜福利一区二区三区| 亚洲熟女乱一区二区精品成人| 91美女在线观看视频| 五月天男人的天堂中文字幕| 亚洲欧美韩国日本一区二区| 人妻人妻在线视频网站| 日本一本午夜在线播放| 日本国产亚洲欧美色综合| 一区二区三区国产在线成人av| 最新激情中文字幕视频| 亚洲综合熟女乱中文| 999久久久人妻精品一区| 国产精品国产三级在线高清观看| 伊人免费观看视频一| 亚洲综合在线视频在线播放| 深夜福利免费观看在线看| 中文字幕一区二区三区久久久| av中文字幕国产精品| 亚洲综合首页综合在线观看| 99国产精品国产精品毛片19| 欧美成人久久久桃色aa| 中文人妻av一区二区三区| 亚洲妹妹我爱你在线观看| 福利一二三在线视频观看| 黑人爆操女人免费视频| 91系列视频在线播放| 欧美精品999不卡| 极品风骚人妻3p视频| 国产一级一国产一级毛片| 亚洲中文字幕在线视频观看二区 | 日本福利片在线播放| 2021国产剧情麻豆| 三区美女视频在线观看| 亚洲成人欧洲成人在线| 久久人人爽人人爽人人av东京热| 亚洲成人动漫av在线| 夜色17s精品人妻熟女av| 色视频在线播放免费观看| 免费在线观看黄色小网站| 亚洲熟妇丰满多毛xxxx网站| 大香焦一道本一区二区三区| 午夜偷拍的视频久久久免费大全| 91美女在线观看视频| 松本菜奈实最新av在线| 国产一级一国产一级毛片| av中文字幕国产精品| 久久精品四虎夜夜拍拍拍| 狠狠干狠狠操免费视频| 91九色pony蝌蚪| 骚穴被阴茎插免费视频| 核xp工厂精品久久亚洲| 国产主播诱惑毛片av| 国产青青青青草免费在线视频| 国产一区两区三区福利小视频| 亚洲情色777中文字幕| 99热这里只有精品免费播放| 亚洲人精品午夜射精日韩| 5566熟女人妻人妻| 亚洲自拍偷拍av在线| 美女露阴道让男人捅| 中文字幕日韩人妻在线三区| 黄片视频免费观看视频| 91麻豆精品国产在线| 自拍偷拍亚洲综合第一页| 人妻少妇视频系列视频在线| 91福利高清在线播放| 亚洲欧美韩国日本一区二区| 欧美精品999不卡| 午夜国产精品免费视频| iga肾三级算严重吗| 人妻中文字幕亚洲在线| av福利免费体验观看| 亚洲欧洲一区二区三区在线| 在线成人教育平台排名| 真人一进一出抽搐大尺度视频| 中文字幕熟女乱一区二区| 蜜乳av中文字幕一区二区| 亚洲精品9999蜜桃| 手机看片1024精品国产| 东京热日本一区二区三区| 最新国产精品拍在线观看| 午夜国产一区二区三区| 天天在线播放日韩av| 91在线九色porny| 91在线九色porny| 中文字幕国产一区在线视频| 中文字幕熟女人妻丝袜丝在线| 亚洲男人的天堂最新网址| 亚洲一区在线视频观看地址| 中文字幕观看中文字幕免费| 日韩人妻中文字幕二区| 97视频538在线观看| av人摸人人人澡人人超碰小说| 黑鸡巴肏少妇逼视频| 午夜亚洲国产精品中字| 日日躁夜夜躁狠狠操| 加勒比不卡在线视频| lutu玩弄人妻短视频| 快使劲弄我视频在线播放| 国产精品久久久久久成人久| 日韩久久不卡免费视频 | 免费看一级高潮喷水片| 精品欧美乱码久久久| 国产av嗯嗯啊啊av| 国产中文亚洲熟女日韩| 91大神福利视频网| 亚洲成年人精品国产| av日韩视频在线观看| 裸日本资源在线午夜| 新亚洲天堂男子av| 91偷拍被偷拍在线播放| 国产自拍偷拍在线精品| 国产天堂av不卡网| 国产精品成人免费电影| 日本免费人爱做视频在线观看不卡 | 久久亚洲国产成人精品麻豆| 免费观看在线中文字幕视频| 少妇精品视频一区二区免费看| 日本成人福利电影网| 三区美女视频在线观看| 正在播放麻豆精品一区二区| 东京热男人的天堂视频| 欧美亚洲另类精品第一页| 一区二区三区av免费天天看| 国产三级自拍视频在线观看网站| 福利小视频免费在线| 天堂在线中文字幕av| 免费中文三级在线观看| 日本电影一级人妻在线播放四区| 亚洲一区二区在线激情| 一区二区三区四区久久久久韩日| 欧美日韩在线观看免费播放| 亚洲高清一区二区三区久久| 黄色大片一级老太太操逼| 国内销魂老女人老泬| 天天曰天天摸天天爽| 亚洲美女黄色福利视频网站大全| 亚洲成人中文无码在线| 羞羞漫画无限免费观看秋蝉| 69精品人妻久久久久久久久久久| 亚洲欧美另类丝袜另类自拍| 最新国产精品拍在线观看| 精品精品精品精品精品污污污污| 91九色尤物无套内射| 国产91黑丝小视频在线观看| 免费看超污视频在线观看| 丝袜美腿日韩av一区| 2020年亚洲男人天堂网| 每日更新日韩欧美在线| 亚洲成a人片777777张柏芝| 黑人黄色免费一级av| 欧美精品一区二区三区观看| 男插女视频大全免费| 日本福利网站一区二区| 成人精品影视一区二区| 99re这里是国产精品首页| 国产av精品一区二区三区久久| 五月天色婷婷狠狠爱| 69国产在线视频网站| 亚av一二三在线观看| 国产精品福利久久久久| 熟妇人妻丰满久久久久久久| 亚洲avav天堂av在线网毛片| 91 精品视频在线看| 狠狠操深爱婷婷综合一区| 91香蕉国产亚洲一二三区| 一级做性色a爱片久久片| 97视频538在线观看| 亚洲va999天堂va| 欧美一级特黄大片在线| 免费的啪啪视频软件| 少妇被中出一区二区| 亚洲成人动漫av在线| 亚洲一区二区三区无码在线| 欧美男男在线观看视频网站| 91人妻人人爽色啊啊啊| 欧美日本在线免费视频| 亚洲一区二区在线视频观看免费| 一区二区三区五区六区| 在线视频国产精品欧美| 色屁屁一区二区三区在线观看| 女生抠逼自慰啊啊啊啊啊啊啊下载 | 亚洲av综合av一去二区三区| 大秀成年人国产精品视频| 男人用大鸡巴狂操女人肉穴| 99精品久久99久久久久一| 亚洲一区二区在线激情| 欧美成人红桃视频在线观看| 大屁股熟女一区二区视频| 国产,亚洲,欧美综合| 精产国品一二三77777| 欧美极品少妇高潮喷水| 超碰在线pro中文字幕| 国色天香一二三期区别大象| 午夜福利国产精品久久久久| 久久久人妻免费视频| 国产igao激情在线视频入口| 91精品视频在线观看视频| 人妻激情综合久久久久蜜桃| 国产激情视频在线观看的| 欧美在线视频不卡一区| 久久精品久久久久观看99水蜜桃| 亚洲午夜国产末满十八岁勿进网站 | 免费高清av一区二区| 福利视频免费在线播放| 欧美啪啪一区二区三区| 国产精品剧情在线亚洲| 99久久国语露脸国产精品| 一区二区三区 国产日韩欧美| 深夜福利免费观看在线看| 九九六视频,这里只有精品| 成人18禁高潮片免费日本| 黑人3p日本女优中出| 区一区二区三免费观看视频| 亚洲黄色成人一级片| 夫亡人妻被强干中文字幕| 亚洲人成小说网站色| 日本一区二区高清av中文| 午夜精品一区二区三区不卡顿| 高清欧美色欧美综合网站 | av福利免费体验观看| 97cao在线视频| 亚洲另类激情视频在线看| 少妇被粗大的猛进69视频| 亚洲成a人片777777张柏芝| 美女把逼扒开让男人桶| 在线有码人妻自拍视频| 69国产在线视频网站| 欧美色视频网址大全| 黑人黄色免费一级av| 国产福利三级在线观看| 午夜精品久久久久久久精品乱码| 久久久久国产精品二区| 国语对白性爱三级片免费看| 黑人3p日本女优中出| 操人妻人妻天天爽天天偷| 五月在线视频免费播放91| 亚洲第一成年偷拍视频| 干逼又爽又黄又免费的视频| 精品欧美黑人一区二区三区| 精品人妻在线激情视频| 亚洲国产精品 久久久| 日本一本午夜在线播放| 日本少妇精品免费视频| 在线免费观看欧美小视频| 55夜色66夜色亚洲精品| 上床啪啪啪免费视频| 黑人侵犯人妻森泽佳奈| jizzjizz国产精品传媒| 亚洲gay视频在线观看| 91精品91久久久久| 超碰在线pro中文字幕| 99热这里只有精品免费播放| caopeng97在线观看视频| 国产做A爱免费视频在线观看| 伊人免费观看视频一| 午夜福利午夜福利影院| 成年人免费福利在线| 激情久久在线免费观看视频| 91色哟哟视频在线观看| 久草久热这里只有精品| 无码精品黑人一区二区老人| 亚洲国产日韩精品在线| 中文字幕在线免费观看成人| 亚洲精品激情视频在线观看| www国产亚洲精品久久久| 天天看片天天摸天天操| 欧洲成熟女人色惰片| 精品不卡一区二区三区| 99 re国产精品| 美女福利网站在线播放| 国产不卡免费在线观看| 亚洲欧美日韩中文在线观看| 福利小视频免费在线| 欧美日韩精品aaa| 男人的天堂aⅴ在线| 91亚洲精品久久蜜桃| 老司机在线视频福利观看| 4438x亚洲最大的成人| 一二三四区国产在线观看| 综合激情网,激情五月| 黄版视频在线免费观看| 黄片操操操操操操c| a级黄片免费观看| 91美女在线观看视频| 国产av高清二区三区| 国产成人情侣激情视频| 性色蜜桃臀x88av天美传媒| xxoo福利视频导航| 日本人妻熟妇丰满成熟HD系列| 欧美成人区一区二区三| 自拍丝袜国产欧美日韩| 欧美激情视频第一页|