精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

聊聊Select for update到底加了什么鎖

數據庫 其他數據庫
最近在開發需求的時候,用到了?select...for update?。在代碼評審的時候,一位同事說 ,唯一索引+一個非索引字段?,是否可能會鎖全表呢?本文田螺哥將通過9?個實驗操作的例子,給大家驗證select...for update到底加了什么鎖,是表鎖還是行鎖。

前言

大家,我是田螺。

最近在開發需求的時候,用到了select...for update。在代碼評審的時候,一位同事說 ,唯一索引+一個非索引字段,是否可能會鎖全表呢?本文田螺哥將通過9個實驗操作的例子,給大家驗證select...for update到底加了什么鎖,是表鎖還是行鎖。

這是本文的提綱哈:

圖片

因為加鎖是跟數據庫的隔離級別息息相關的。而常用的數據庫隔離級別也就RC(讀已提交)和RR(可重復讀),所以本文分別根據RC(讀已提交) 和 RR(可重復讀)隔離級別展開講述。

1. 環境準備

設置數據庫隔隔離級別

mysql> set global TRANSACTION ISOLATION level read COMMITTED;
Query OK, 0 rows affected (0.00 sec)

mysql> select @@transaction_isolation;
+-------------------------+
| @@transaction_isolation |
+-------------------------+
| READ-COMMITTED |
+-------------------------+
1 row in set (0.00 sec)

自動提交關閉

mysql> set @@autocommit=0;  //設置自動提交關閉
Query OK, 0 rows affected (0.00 sec)

mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
| 0 |
+--------------+
1 row in set (0.00 sec)

建表語句

CREATE TABLE `user_info_tab` (
`id` int NOT NULL AUTO_INCREMENT,
`user_name` varchar(255) DEFAULT NULL,
`age` int DEFAULT NULL,
`city` varchar(255) DEFAULT NULL,
`status` varchar(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_user_name` (`user_name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1570072 DEFAULT CHARSET=utf8mb3;

初始化數據(接下來的實驗證明,都是基于這幾條初始數據)

insert into user_info_tab(`user_name`,`age`,`city`,`status`) values('杰倫',18,'深圳','1');
insert into user_info_tab(`user_name`,`age`,`city`,`status`) values('奕迅',26,'湛江','0');
insert into user_info_tab(`user_name`,`age`,`city`,`status`) values('俊杰',28,'廣州','1');

MYSQL 版本

mysql> select @@version;  
+-----------+
| @@version |
+-----------+
| 8.0.31 |
+-----------+
1 row in set (0.00 sec)

2.RC 隔離級別

2.1 RC隔離級別 + 唯一索引

先把隔離級別設置為RC,因為user_name為唯一索引,我們使用user_name為條件去執行select......for update語句,然后開啟另外一個事務去更新數據同一條數據,發現被阻塞了。如下圖:

圖片

事務二的更新語句為什么會阻塞呢?

因為事務一的select......for update已經加了鎖。那加的是行鎖還是表鎖呢?如果加的是表鎖的話,我們更新其他行的記錄的話,應該是也會阻塞的,如果是行鎖的話,更新其他記錄是可以順利執行的。

大家可以再看下這個圖:

圖片

通過實驗,可以發現:如果事務中是更新其他行記錄的話,是可以順利執行的。因此在RC隔離級別下,如果條件是唯一索引,那么select...for update加的應該是行鎖。

有些小伙伴會很好奇,到底加了什么鎖呢? 接下來帶大家看看,具體加的是什么鎖。

我用的MySQL版本是8.0+,用這個語句查看:

SELECT * FROM performance_schema.data_locks\G;

如下圖,select * from user_info_tab where user_name ='杰倫' for update語句一共加了三把鎖,分別是 IX意向排他鎖(表級別的鎖,不影響插入)、兩把X排他鎖(行鎖,分別對應唯一索引,主鍵索引)

圖片

有些讀者朋友說,這里不是加了IX表鎖嘛?為什么不阻塞其他行的更新? 其實這個是意向排他鎖。

意向排他鎖:簡稱IX鎖,當事務準備在某條記錄上加上X鎖時,需要在表級別加一個IX鎖。如select ... for update,要給表設置IX鎖;

那既然有表鎖,為啥事務二在執行其他行的更新語句時,并不會阻塞,這是因為:意向鎖僅僅表明意向的鎖,意向鎖之間不會互斥,是可以并行的。,鎖的兼容性如下:

圖片

有些小伙伴可能還有疑問,為啥會有兩把的X鎖呢? 不是都鎖住的是同一行嘛?其實RC隔離級別下,唯一索引的加鎖是這樣的:

圖片

為什么不是唯一索引上加X鎖就可以了呢?為什么主鍵索引上的記錄也要加鎖呢?

如果并發的一個SQL,通過唯一索引條件,來更新主鍵索引:update user_info_tab set user_name = '學友' where id = '1570068';此時,如果select...for update語句沒有將主鍵索引上的記錄加鎖,那么并發的update就會感知不到select...for update語句的存在,違背了同一記錄上的更新/刪除需要串行執行的約束。

大家如果對于鎖這塊基礎知識,還是有疑問的話,可以看下我之前的這篇文章哈:兩萬字詳解!InnoDB鎖專題!

2.2 RC 隔離級別 + 主鍵

在RC 隔離級別下,如果select...for update的查詢條件是主鍵id,加的又是什么鎖呢?

我們執行語句:select * from user_info_tab where id ='1570070' for update;然后開啟另外一個事務去更新數據同一條數據,發現被阻塞了。如下圖:

圖片

事務二更新的是其他行的記錄,則是可以順利執行的,如下圖:

圖片

通過實驗,可以發現:

如果事務中是更新其他行記錄,是可以順利執行的話。在RC隔離級別下,如果條件是主鍵,那么select...for update鎖的也是行。

根據2.1小節的結論,select...for update都會加個表級別的IX意向排他鎖。所以,查詢條件是id的話,select...for update會加兩把鎖,分表是IX意向排他鎖(表鎖,不影響插入)、一把X排他鎖(行鎖,對于主鍵索引)

我們執行語句,查詢一下到底加的是什么鎖。

begin;
select * from user_info_tab where id ='1570070' for update;
SELECT * FROM performance_schema.data_locks\G;

圖片

因此在RC隔離級別下,如果條件是主鍵,那么select......for update加的就是兩把鎖,一把IX意向排他鎖(不影響插入),一把對應主鍵的X排他鎖(行鎖,會鎖住主鍵索引那一行)。

2.3 RC 隔離級別 + 普通索引

在RC 隔離級別下,如果select......for update的查詢條件是普通索引,加的又是什么鎖呢?

我們這里先給原來表加上普通索引:

alter table user_info_tab add index idx_city (city);

我們執行語句:select * from user_info_tab where city ='廣州' for update;然后開啟另外一個事務去更新同一條數據,發現被阻塞了。如下圖:

圖片

如果事務二更新的是其他行的記錄,還是可以順利執行的,如下圖:

圖片

我們看一下select * from user_info_tab where city ='廣州' for update;到底加了什么鎖,如下圖:

圖片

發現一共加了三把鎖,分別是:IX意向排他鎖(表鎖)、兩把X排他鎖(行鎖,分別對應普通索引的X鎖,對應主鍵的X鎖)。

如果查詢條件,沒有命中數據庫表的記錄,又加什么鎖呢?

我們把查詢條件改一下:select * from user_info_tab where city ='廣州' and status='0' for update;

圖片

發現只加了一把鎖,即IX意向排他鎖(表鎖,不影響插入)。

2.4 RC 隔離級別 + 無索引

在RC 隔離級別下,如果select...for update的查詢條件是無索引呢,加的又是什么鎖呢?

多數讀者憑感覺都是鎖表了,我們來驗證一下。

我們執行語句:select * from user_info_tab where age ='26' for update;(age是沒有加索引的),然后開啟另外一個事務去更新數據。如下圖:

圖片

由上圖可以發現,事務一 先執行select......for update,然后事務二先更新別的行,發現可以順利執行,如果執行for update的同一行,還是會阻塞等待。

可推出結論,select...for update的查詢條件是無索引,主要還是行鎖。我們看下具體的加鎖情況:

SELECT * FROM performance_schema.data_locks\G;

圖片

發現一共加了兩把鎖,分別是:IX意向排他鎖(表鎖)、一把X排他鎖(行鎖,對應主鍵的X鎖)。

為什么不是一個鎖表的X鎖呢? 這是因為:

若age列上沒有索引,MySQL會走聚簇(主鍵)索引進行全表掃描過濾。每條記錄都會加上X鎖。但是,為了效率考慮,MySQL在這方面進行了改進,在掃描過程中,若記錄不滿足過濾條件,會進行解鎖操作。同時優化違背了2PL原則。

3.RR 隔離級別

3.1  RR隔離級別 + 唯一索引

如果是RR(可重復)的數據庫隔離級別呢,select...for update的查詢條件是唯一索引的話,加的又是什么鎖呢?

我們知道RR隔離級別比RC隔離級別,主要差異還是有間隙鎖這個概念。接下來我們還是通過實驗去驗證,先把數據庫隔離級別設置為RR:

mysql> set global transaction isolation level repeatable read; (設置完好像要重啟一下)

Query OK, 0 rows affected (0.00 sec)

我們執行語句:select * from user_info_tab where user_name ='杰倫' for update;(user_name是唯一索引的),然后開啟另外一個事務去更新數據。如下圖:

圖片

由上圖可以發現,即使是RR數據庫隔離級別,事務一先執行select...for update,然后事務一先更新別的行,發現可以順利執行,如果執行更新for update的那一行,還是會阻塞超時。

再去看下具體加了什么鎖:

圖片

大家可以發現,不管是RC隔離級別還是RR隔離級別,select...for update,查詢條件是唯一索引,命中數據庫表記錄時,一共會加三把鎖:一把IX意向排他鎖 (表鎖,不影響插入),一把對應主鍵的X排他鎖(行鎖),一把對應唯一索引的X排他鎖 (行鎖)。

3.2 RR 隔離級別 + 主鍵

如果是 RR(可重復讀)的數據庫隔離級別,select...for update的查詢條件是主鍵的話,加的又是什么鎖呢?

根據前面的實驗結果,我們其實可以推測得出來了,應該跟RC隔離級別一樣,會加兩把鎖:一把IX意向排他鎖(表鎖,不影響插入),一把對應主鍵的X排他鎖(行鎖,影響對應主鍵那一行的插入)。

我們通過語句確認一下,先輸入一下語句:

begin;
select * from user_info_tab where id ='1570070' for update;
SELECT * FROM performance_schema.data_locks\G;

大家可以看下,跟我們的推測是一樣的:

圖片

3.3 RR 隔離級別 + 普通索引

在RR隔離級別下,如果select...for update的查詢條件是普通索引的話,除了會加X鎖,IX鎖,還會加Gap 鎖。

Gap鎖的提出,是為了解決幻讀問題引入的,它是一種加在兩個索引之間的鎖。

我們來驗證一下,先開始事務一,執行一下操作:

begin;
select * from user_info_tab where city ='廣州' for update;

接著開啟事務二

begin;
insert into user_info_tab(`user_name`,`age`,`city`,`status`) values('方燕',27,'汕頭','1');

驗證流程圖如下:

圖片

大家可以發現,插入新記錄,會被阻塞,那是因為有間隙鎖的緣故,我們再看下到底加了哪些鎖:

圖片

發現相對于RC隔離級別,確實多了間隙鎖,鎖住范圍了。我畫一下這種場景的加鎖示意圖:

圖片

如果要插入汕頭城市的記錄,會被Gap鎖鎖住了,因此會阻塞。

因此,在RR隔離級別下,如果select...for update的查詢條件是普通索引的話,命中查詢記錄的話,除了會加X鎖(行鎖),IX鎖(表鎖,不影響插入),還會加Gap 鎖(間隙鎖,會影響插入)。

大家如果對間隙鎖這塊不是很熟悉的話,可以看下我以前的這篇文章哈,兩萬字詳解!InnoDB鎖專題!

3.4  RR隔離級別 + 無索引

在RR隔離級別下,如果select...for update的查詢條件是無索引的話,會鎖全表嘛?來一起驗證一下

我們直接按順序執行以下這些語句:

begin;
select * from user_info_tab where age ='26' for update;
select OBJECT_NAME,INDEX_NAME, LOCK_TYPE,LOCK_MODE, LOCK_STATUS, LOCK_DATA FROM performance_schema.data_locks;

可以發現加了這么多鎖:

圖片

一共五把鎖,這個IX鎖(表級別,意向排他鎖),我們可以理解,跟前面幾個例子的一樣。后面三把行鎖,就是把每一行的數據記錄,都加了X排他鎖(行鎖,鎖的對象對應于主鍵Id),我們也可以理解。但是這個第二行,是一把怎么樣的X鎖呢?

圖片

我谷歌了一下,什么是supremum pseudo-record,找到了這個解釋:

For the last interval, the next-key lock locks the gap above the largest value in the index and the “supremum” pseudo-record having a value higher than any value actually in the index. The supremum is not a real index record, so, in effect, this next-key lock locks only the gap following the largest index value.

翻譯過來,大概意思就是:相當于比索引中所有值都大,但卻不存在索引中,相當于最后一行之后的間隙鎖。我理解就是如果查詢條件有索引的話,類似于一個(索引最大值,+無窮)的虛擬間隙鎖。

但是因為我們的查詢字段age并沒有索引,鎖為X鎖,lock_data值為supremum pseudo-record,它表示:全表行鎖,要走聚簇索引進行全部掃描。

也就是說RR隔離級別下,對于select...for update,查詢條件無索引的話,會加一個IX鎖(表鎖,不影響插入),每一行實際記錄行的X鎖,還有對應于supremum pseudo-record的虛擬全表行鎖。這種場景,通俗點講,其實就是鎖表了。

我們來做個實驗,驗證虛擬全表行鎖的存在,先開啟事務一,執行:

begin;
select * from user_info_tab where age ='26' for update;

然后開啟事務二,執行一個插入語句:

begin;
insert into user_info_tab(id,`user_name`,`age`,`city`,`status`) values(1,'小明',31,'北京','1');

大家可以看下,阻塞了,:

圖片

加餐

大家有沒有發現,田螺哥列舉RR數據庫隔離級別的例子,select...for update條件都是命中數據庫表記錄的。在這里,田螺哥給大家出道題。在RR隔離級別下,如果select...for update的查詢條件,沒命中當前數據表記錄的話,又加什么鎖呢?

我們來搞點刺激的,select...for update 搞兩個條件:一個唯一索引(user_name) + 一個無索引(status),然后沒命中當前數據表記錄,你覺得會加什么鎖呢?

CREATE TABLE `user_info_tab` (
`id` int NOT NULL AUTO_INCREMENT,
`user_name` varchar(255) DEFAULT NULL,
`age` int DEFAULT NULL,
`city` varchar(255) DEFAULT NULL,
`status` varchar(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_user_name` (`user_name`) USING BTREE,
KEY `idx_city` (`city`)
) ENGINE=InnoDB AUTO_INCREMENT=1570074 DEFAULT CHARSET=utf8mb3

我們按順序執行者幾條語句:

begin;
select * from user_info_tab where user_name ='杰倫' and status ='0' for update ;
select OBJECT_NAME,INDEX_NAME, LOCK_TYPE,LOCK_MODE, LOCK_STATUS, LOCK_DATA FROM performance_schema.data_locks;

圖片

最后

我是撿田螺的小男孩。通過本文,大家學到哪些知識點呢?

  1. select...for update在不同場景,都加了什么鎖。
  2. 如何查看一個SQL 加了什么鎖 (執行完原生SQL,再執行SELECT * FROM performance_schema.data_lock
  3. 如何手寫個死鎖 (分別開兩個事務,制造鎖沖突,文章的例子,好多都是死鎖的case)
責任編輯:武曉燕 來源: 撿田螺的小男孩
相關推薦

2022-01-21 10:51:39

MySQL索引

2023-11-06 08:35:08

表鎖行鎖間隙鎖

2024-06-14 09:27:00

2023-10-25 08:21:15

悲觀鎖MySQL

2024-03-04 00:01:00

鎖表鎖行MySQL

2020-07-02 14:30:12

SDNSDON交換機

2022-03-17 21:30:31

BRAS寬帶服務器

2022-05-31 09:17:08

通信網絡技術

2021-08-31 06:51:18

Babel前端開發

2023-01-27 20:59:19

行鎖表鎖查詢

2024-05-17 09:33:22

樂觀鎖CASversion

2024-05-13 12:44:00

InnodbMySQL行級鎖

2022-05-26 00:19:29

通信信息5G

2022-05-16 08:03:12

MySQL數據庫

2023-03-10 15:45:03

Golang公平鎖

2023-11-15 14:34:05

MySQL悲觀鎖

2022-02-23 08:18:06

nginx前端location

2022-02-08 08:12:51

無鎖編程設計

2025-02-10 09:58:48

2022-08-05 08:27:05

分布式系統線程并發
點贊
收藏

51CTO技術棧公眾號

免费黄色电影在线观看| 久久狠狠高潮亚洲精品| 一区二区三区日本视频| 亚洲日本在线a| 国产精品久久国产精品| 日韩特级黄色片| 日韩国产在线| 亚洲精品一区二区三区精华液| 欧美aⅴ在线观看| 91caoporn在线| 粉嫩av亚洲一区二区图片| 青草青草久热精品视频在线观看| 极品蜜桃臀肥臀-x88av| 中文字幕一区图| 色哟哟国产精品免费观看| 中文字幕久精品免| 亚洲欧美日韩精品永久在线| 麻豆精品一区二区三区| 欧美一级片久久久久久久| 五月婷婷婷婷婷| 91午夜精品| 欧美写真视频网站| 日本欧美视频在线观看| 久久黄色美女电影| 久久综合成人精品亚洲另类欧美 | 欧美变态口味重另类| 免费日韩中文字幕| 牛牛在线精品视频| 中文乱码免费一区二区| 久久久久国产精品视频| 国产视频一二三四区| 日韩中文字幕区一区有砖一区| 欧美激情亚洲视频| 成人欧美一区二区三区黑人一| 久久精品国产亚洲blacked| 日韩一区二区三区在线| 在线视频日韩一区| 澳门成人av网| 亚洲大片在线观看| 在线免费观看一区二区三区| 欧美色18zzzzxxxxx| 国产jizzjizz一区二区| 成人免费看吃奶视频网站| www毛片com| 99精品热6080yy久久| 欧美俄罗斯乱妇| 欧美特黄一级片| 日韩一级毛片| 在线观看欧美日韩国产| 自拍偷拍亚洲天堂| 色综合www| 亚洲第一视频网站| 日韩黄色一区二区| 日韩欧美高清一区二区三区| 欧美丰满少妇xxxxx高潮对白 | 亚洲午夜天堂| 精品久久久久久电影| 黄色大片中文字幕| 超碰成人av| 精品久久久久久亚洲国产300 | 182在线观看视频| 日韩在线观看| 久久精品99久久香蕉国产色戒| 中文字幕第69页| 888久久久| 欧美成人亚洲成人| 国产亚洲精品成人| 一区二区三区国产盗摄| 欧美中文在线免费| 18国产免费视频| 狠狠色综合日日| 2014亚洲精品| 少妇精品高潮欲妇又嫩中文字幕| 99热国产精品| 日本一区二区三区免费看| 在线视频自拍| 一区二区三区丝袜| 欧美综合在线播放| 国产精品一区二区av影院萌芽| 欧美日韩亚洲网| 狠狠97人人婷婷五月| 超碰在线cao| 精品久久久久久久久久| 老司机午夜网站| 肉肉视频在线观看| 偷拍与自拍一区| 久久视频这里有精品| 午夜av不卡| 色av成人天堂桃色av| 久久久精品麻豆| 电影中文字幕一区二区| 精品嫩草影院久久| 五月天精品视频| 成人影视亚洲图片在线| 久久国产一区二区三区| 国产一级久久久| 亚洲深夜激情| 国产精品嫩草影院一区二区| 国产精品色综合| 成人精品视频一区| 国产一区二区不卡视频| 国产毛片在线| 亚洲丝袜美腿综合| 97免费视频观看| 依依综合在线| 欧美日韩一区精品| 18深夜在线观看免费视频| 精品深夜福利视频| 国产亚洲一级高清| 午夜爱爱毛片xxxx视频免费看| 欧美黄色大片网站| 国产精品aaaa| 性一交一乱一透一a级| 久久这里只有精品首页| 日本福利视频导航| 女厕盗摄一区二区三区| 在线精品视频免费播放| 免费观看黄网站| 国产一区日韩| 欧美激情2020午夜免费观看| 国产91国语对白在线| 国产乱国产乱300精品| 精品一区二区国产| 在线免费观看黄| 欧美日韩在线影院| 成年网站在线播放| 亚洲另类av| 欧美精品xxx| 91精品在线视频观看| 99视频一区二区三区| 国产又爽又黄ai换脸| 一级毛片久久久| 精品毛片乱码1区2区3区| 嘿嘿视频在线观看| 亚洲精品色图| 成人xxxxx色| 九七久久人人| 欧美视频一区二区在线观看| 91精品小视频| 欧美午夜一区| 成人妇女免费播放久久久| 蝌蚪视频在线播放| 精品福利一区二区| 苍井空张开腿实干12次| 国产精品久久久久久久久久10秀| 国产精品com| 四虎影视2018在线播放alocalhost| 最新热久久免费视频| 国产视频手机在线播放| 亚洲第一福利社区| 97香蕉久久超级碰碰高清版| 丰满少妇被猛烈进入| 亚洲精品视频自拍| 午夜天堂在线视频| 国产亚洲电影| 国产成人精品综合久久久| 天天综合永久入口| 亚洲在线视频免费观看| 在线观看免费看片| 婷婷综合伊人| 91精品视频播放| 黄色一级大片在线免费看产| 欧美日韩一区二区三区四区五区| 欧美黄色激情视频| 一本色道88久久加勒比精品| 久久国产视频网| 色中色综合影院手机版在线观看| 亚洲图片小说视频| 国产精品久久久久久久第一福利| 蜜桃免费在线视频| 精品久久网站| 国产精品久久久久久久天堂 | 精品网站999www| 国产中文字幕免费| av高清久久久| 国产一区二区三区精彩视频| 在线日韩一区| 国产精品久久久久久久7电影| 精品电影在线| 色噜噜狠狠色综合欧洲selulu| 丁香激情五月少妇| 久久99精品久久久久久久久久久久 | 中文字幕色呦呦| 日韩三级久久| 国内精品伊人久久| 欧美人体大胆444www| 在线观看亚洲一区| 激情高潮到大叫狂喷水| 国产精品中文有码| 人妻夜夜添夜夜无码av| 久久99国产成人小视频| 国产精品免费观看在线| 九七电影韩国女主播在线观看| 日韩欧美国产一区在线观看| 欧美成人aaaaⅴ片在线看| 99综合电影在线视频| 一本岛在线视频| 欧美在线精品一区| 久久精品第九区免费观看 | 亚洲爱爱综合网| 精品久久久久久久久久| 东方av正在进入| 92国产精品观看| mm131亚洲精品| 亚洲一级高清| 亚洲午夜在线观看| 亚洲va欧美va人人爽成人影院| 欧美成人免费在线观看| 国产一二三在线观看| 欧美一卡在线观看| 一级片视频在线观看| 日韩毛片一二三区| 小毛片在线观看| 日韩不卡在线观看日韩不卡视频| 视频一区二区视频| 精品自拍偷拍| 3d动漫啪啪精品一区二区免费| 欧美男人天堂| 欧美成人自拍视频| 国内av一区二区三区| 精品国产亚洲一区二区三区在线观看| 日日夜夜综合网| 樱花影视一区二区| 亚洲一区视频在线播放| 成人高清视频在线观看| 亚洲免费av一区| 午夜影院日韩| 少妇一晚三次一区二区三区| 欧美亚洲大陆| 国产精品一区二区你懂得| 国产成人a视频高清在线观看| 91高清视频在线免费观看| 哥也色在线视频| 一区二区三区四区在线观看视频| 免费的黄色av| 欧美一区二区三区在线电影 | 岛国在线大片| 亚洲国产精品美女| ,一级淫片a看免费| 欧美日本一区二区在线观看| 69国产精品视频免费观看| 一区二区久久久久| 黄色录像一级片| 国产片一区二区| 丰满大乳奶做爰ⅹxx视频 | 国产精品久久久久国产a级| 国产www视频在线观看| 色综合久久悠悠| 国产cdts系列另类在线观看| 日韩视频精品在线| 最新av网站在线观看 | 91精品国产综合久久久久久蜜臀| jizz内谢中国亚洲jizz| 国内精品久久久久久| 色yeye免费人成网站在线观看| 精品国产美女在线| 日本在线观看| 久久6免费高清热精品| 免费av在线网址| 中文字幕欧美日韩精品 | 中文字幕亚洲欧美日韩高清| 久久精品a一级国产免视看成人| 337p日本欧洲亚洲大胆色噜噜| 欧美一级做性受免费大片免费| 日韩精品中文字幕在线不卡尤物| 97caocao| 日韩欧美一级二级| av一级黄色片| 精品处破学生在线二十三| 亚洲av毛片成人精品| 亚洲欧美国产制服动漫| 日本亚洲欧美| 亚洲天堂av图片| 都市激情一区| 日韩在线www| av黄色在线观看| 麻豆国产va免费精品高清在线| 二区三区四区高清视频在线观看| 美女视频黄免费的亚洲男人天堂| 日本在线视频www鲁啊鲁| 久久久久久久国产精品视频| av中文字幕在线观看第一页| 2019av中文字幕| 欧美理论影院| 国产精品国产三级国产aⅴ9色| 成人免费在线观看视频| 亚洲精品女av网站| 日韩第一区第二区| 久久青青草综合| 欧美肉体xxxx裸体137大胆| 一区国产精品| 亚洲深深色噜噜狠狠爱网站| 成人午夜免费剧场| 久久天堂成人| 日韩成人av免费| 成+人+亚洲+综合天堂| 无码 人妻 在线 视频| 亚洲欧美综合在线精品| 国产精品白嫩白嫩大学美女| 欧美性猛交xxxxx水多| 亚洲视频久久久| 精品久久久久99| 国产毛片在线| 久久国产精品电影| av日韩国产| 国产日韩欧美另类| 亚洲美女性囗交| 日日嗨av一区二区三区四区| 高清av免费看| 不卡在线观看av| 极品久久久久久久| 精品国产福利在线| 国产精品久久久久久无人区| 日韩av在线高清| 国产乱色在线观看| 国产成人精品视频在线| 欧美亚洲国产日韩| 97精品国产97久久久久久粉红| 久久xxxx精品视频| 免费欧美一级片| 中文字幕巨乱亚洲| 国产真实乱人偷精品视频| 91精品国产一区二区| 国产三级在线免费观看| 久久久久久成人| 日韩一区中文| 欧美日韩亚洲一区二区三区在线观看| 在线观看的日韩av| 亚洲欧美日韩精品一区| 26uuu国产一区二区三区| 性色av无码久久一区二区三区| 欧洲精品视频在线观看| 好吊色视频一区二区| 欧美日韩成人黄色| 草民电影神马电影一区二区| 国产综合av一区二区三区| 亚洲国产精品久久久天堂| 少妇性l交大片| 成人免费毛片app| 久久中文免费视频| 欧美日韩精品一区二区在线播放| 亚洲人成色777777老人头| 欧美成人免费在线视频| 欧州一区二区三区| 国产精品夜夜夜爽张柏芝| 日本成人在线视频网站| 久久精品国产亚洲av麻豆| 日韩美女视频一区二区 | 国产免费一区视频观看免费| 日韩电影不卡一区| 日本中文字幕亚洲| 成人一道本在线| 久久老司机精品视频| 精品国产一区二区国模嫣然| 在线观看中文| 国产精品高清一区二区三区| 欧美日韩福利| 亚洲精品一区二区18漫画| 成人免费在线播放视频| 国产一区二区女内射| 中文字幕亚洲一区二区三区| 实拍女处破www免费看| 中文字幕乱码一区二区免费| 中文字幕免费高清网站| 精品成a人在线观看| 国内精彩免费自拍视频在线观看网址| 国产精品视频免费观看| 伊人久久久大香线蕉综合直播| 99久久久无码国产精品性波多 | 欧洲美女少妇精品| 国产精品视频永久免费播放 | 国产一区二区高清| wwwwxxxx国产| 日本丰满少妇一区二区三区| 免费福利在线视频| 国产精品私拍pans大尺度在线 | 视频一区视频二区视频三区高| 美国毛片一区二区| 日本 欧美 国产| 欧美一区二区不卡视频| 一二三四区在线观看| 97久久天天综合色天天综合色hd| 99热这里只有精品8| 亚洲欧美日本一区| 欧美午夜视频网站| 米奇777四色精品人人爽| 国产一区私人高清影院| 18成人免费观看视频| b站大片免费直播| 欧美日韩在线亚洲一区蜜芽| 综合图区亚洲| 麻豆亚洲一区| 久久99精品久久久久久国产越南 | 北条麻妃在线视频观看| 国产区在线观看成人精品| 国产精品欧美亚洲| 97超视频免费观看| 中文字幕午夜精品一区二区三区| 国产精品亚洲一区二区无码| 一本色道a无线码一区v|