精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

波多野结衣之无限发射| 国产福利久久精品| 国产91在线播放九色| 91成人福利社区| 一区二区高清免费观看影视大全 | 日韩黄色在线播放| av在线不卡免费观看| 日韩三级免费观看| 国产裸体免费无遮挡| 国产网站在线免费观看| 91视频免费观看| 国产一区二区丝袜| 91在线看视频| 亚洲欧美日韩高清在线| 日韩精品极品视频免费观看| 日韩一级免费片| 91av久久| 亚洲麻豆国产自偷在线| 欧美日韩国产精品一卡| 国产黄色av网站| 日韩精品一卡二卡三卡四卡无卡| 欧美精品在线免费观看| 丰满的亚洲女人毛茸茸| 欧美尿孔扩张虐视频| 91精品国产综合久久久蜜臀粉嫩| 国产精品欧美激情在线观看| 欧美人与牲禽动交com| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 国精产品久拍自产在线网站| 日韩高清成人在线| 日韩欧美电影一二三| jizzzz日本| 桃花岛成人影院| 亚洲国产aⅴ天堂久久| 自拍偷拍视频在线| 超碰国产在线| 久久久亚洲午夜电影| 国产日韩中文字幕| 曰批又黄又爽免费视频| 日韩精品三区四区| 日韩av电影免费观看高清| 久久精品无码人妻| 自拍日韩欧美| 大胆人体色综合| 可以免费看av的网址| 成人羞羞动漫| 国产亚洲xxx| 手机毛片在线观看| 欧美日韩国产在线观看网站 | 亚洲毛片网站| 国内精品久久久久| 国产精品变态另类虐交| 韩国亚洲精品| 欧美韩国理论所午夜片917电影| 顶臀精品视频www| 香蕉久久网站| 久久视频在线直播| 精国产品一区二区三区a片| 在线精品国产| 欧美激情在线狂野欧美精品| 国产在线综合网| 亚洲深夜激情| 国产成人福利视频| 国产精品高清无码| 毛片av中文字幕一区二区| 国产欧美va欧美va香蕉在| 一级片视频播放| 国产主播一区二区| av激情久久| 天天干,夜夜爽| 久久免费偷拍视频| 五月天亚洲综合情| 91香蕉在线观看| 亚洲成人一二三| 日韩av在线综合| 亚洲91在线| 日韩你懂的在线观看| 六十路息与子猛烈交尾| 一区二区三区视频免费观看| 中文字幕精品av| 日本一级二级视频| 国产欧美不卡| 国产精品视频导航| 国产后入清纯学生妹| 91丨porny丨中文| 手机成人在线| 性欧美video高清bbw| 天天综合网 天天综合色| 99久久国产宗和精品1上映| 亚洲色图综合| 日韩av最新在线| 国产黄色录像视频| 伊人蜜桃色噜噜激情综合| 日本一区二区三区四区视频| 国产精品久久婷婷| 91亚洲精品久久久蜜桃| 亚洲资源在线网| а√天堂8资源在线| 欧美在线一区二区三区| www日本在线观看| 精品久久中文| 久久久久久久久久久人体| 亚洲av无码乱码国产精品fc2| 国产一区二区伦理| 欧美日韩在线观看一区| 91福利国产在线观看菠萝蜜| 一本一道波多野结衣一区二区| 在线观看av免费观看| 九九综合久久| 欧美极品欧美精品欧美视频| 怡春院在线视频| 久久蜜桃av一区精品变态类天堂| 自拍偷拍视频在线| 精品无人乱码一区二区三区| 精品国产一区二区三区不卡| 日韩av毛片在线观看| 美女久久一区| 国产在线精品一区二区三区》 | 一二三四区在线| 久久嫩草精品久久久精品一| 真实国产乱子伦对白视频| 国内欧美日韩| 一区二区三区国产在线观看| 国产黄色片免费看| 国产乱淫av一区二区三区| 日韩精品不卡| 日韩影片中文字幕| 亚洲精品国产品国语在线| 久久精品波多野结衣| 精品一区二区三区免费观看| 日韩videos| 另类激情视频| 亚洲精品日韩久久久| 色播视频在线播放| 成人丝袜18视频在线观看| 热久久最新网址| 亚洲精品三区| 日韩在线观看免费网站| 伊人久久国产精品| 亚洲国产精品av| 国产精品无码一本二本三本色| 日韩有码av| 7777精品视频| 全色精品综合影院| 欧美性猛交xxxx乱大交3| 欧美人与性动交α欧美精品| 综合天天久久| 99re国产视频| 国产精品国精产品一二| 亚洲成人免费在线视频| 久草视频中文在线| 成人午夜激情影院| 少妇av一区二区三区无码| 九九热hot精品视频在线播放| 欧美国产在线电影| 天天av天天翘| 色妹子一区二区| 日本猛少妇色xxxxx免费网站| 美女视频黄免费的久久| 一区二区视频在线播放| 国产视频一区二| 九九热在线精品视频| 亚洲伦理在线观看| 欧美日韩在线影院| 国产三级黄色片| 久久成人免费网站| 免费看日本黄色| 久久影视三级福利片| 国产99视频在线观看| 8888四色奇米在线观看| 7777精品伊人久久久大香线蕉完整版| 日韩精品一区二区亚洲av性色| 国产一区91精品张津瑜| 97在线国产视频| 蜜桃一区二区三区| 91精品久久久久久综合乱菊 | 91视频这里只有精品| 雨宫琴音一区二区三区| 国产精品香蕉视屏| 日韩久久一区二区三区| 久青草国产97香蕉在线视频| 老牛影视av牛牛影视av| 色网综合在线观看| 91香蕉视频在线播放| 菠萝蜜视频在线观看一区| 国产精品无码专区av在线播放| 欧美wwwww| 国产亚洲一区二区三区在线播放| 欧美成a人片在线观看久| 久久人人爽亚洲精品天堂| 天天干天天草天天射| 欧美视频一区二区| 日本a在线观看| 国产精品免费aⅴ片在线观看| 91香蕉视频免费看| 久久婷婷亚洲| 亚洲 欧美 综合 另类 中字| 欧美老女人另类| 国产精品有限公司| 亚洲ww精品| 日韩av手机在线看| 国产蜜臀在线| 久久精品91久久香蕉加勒比| 亚洲 国产 欧美 日韩| 在线观看91精品国产麻豆| 国产91精品一区| 一区二区三区在线观看欧美| av黄色在线免费观看| 成人一二三区视频| 在线观看免费不卡av| 国产精品一国产精品k频道56| 26uuu成人| 第一社区sis001原创亚洲| 久草热久草热线频97精品| 国产精品一区二区三区www| 国产成人自拍视频在线观看| 超黄网站在线观看| 不卡伊人av在线播放| yourporn在线观看中文站| 日韩电影大片中文字幕| 亚洲奶汁xxxx哺乳期| 91精品麻豆日日躁夜夜躁| 一区二区视频网站| 欧美性猛交xxxx乱大交蜜桃| 精品无码久久久久久久| 亚洲欧美日韩在线不卡| 国产馆在线观看| 国产欧美va欧美不卡在线| 免费看污黄网站在线观看| 白白色 亚洲乱淫| 91亚洲一线产区二线产区| 国产乱子轮精品视频| 亚洲一二三av| 激情国产一区二区 | 国产91在线观看| 中文字幕avav| 国产成人在线视频播放| 日本一区二区三区在线免费观看| 久久av中文字幕片| 99热一区二区| 久久精品99久久久| 亚洲性图一区二区| 美女www一区二区| 日韩av片网站| 蜜臀av一区二区| 九九热精品国产| 九九视频精品免费| 中文字幕国产高清| 国产美女在线精品| 国产又粗又猛大又黄又爽| 国产乱对白刺激视频不卡| 青娱乐国产精品视频| 粉嫩绯色av一区二区在线观看| 永久免费黄色片| 国产成人aaa| xxxxxx黄色| 久久久久久久久99精品| 日本成人免费视频| 国产精品美日韩| 国产精品白嫩白嫩大学美女| 夜夜精品浪潮av一区二区三区 | 在线免费亚洲电影| 中文字幕观看在线| 制服丝袜av成人在线看| www天堂在线| 亚洲精品国精品久久99热| 久草在线网址| 色偷偷av亚洲男人的天堂| 在线h片观看| 97精品视频在线| 色豆豆成人网| 亚洲在线视频福利| 精品伊人久久久| 亚洲一卡二卡区| 欧美视频一区| 老熟妇仑乱视频一区二区| 久久9热精品视频| 岛国av免费观看| 久久精品水蜜桃av综合天堂| 在线免费看av网站| 午夜精品久久久久久久久久 | 欧美电影免费提供在线观看| 天天av天天翘| 俺也去精品视频在线观看| 欧美6一10sex性hd| 欧美一区二区.| 日韩毛片免费视频一级特黄| www日韩av| 欧美一级精品片在线看| www.xxx麻豆| 青青青爽久久午夜综合久久午夜| 99国产精品免费视频| 久久蜜臀精品av| 顶臀精品视频www| 在线亚洲精品福利网址导航| 午夜老司机福利| 亚洲性av网站| www视频在线观看| 91免费版网站入口| 免费看成人吃奶视频在线| 成人免费在线视频播放| 日韩电影免费在线观看网站| 久久精品aⅴ无码中文字字幕重口| 国产欧美一区二区精品性色超碰| 久久久久久久中文字幕| 欧美三级电影在线观看| 色婷婷av一区二区三| 久久人人爽人人爽爽久久| 影视一区二区三区| 久久精品国产理论片免费 | 日本黄网站免费| 高清不卡在线观看av| 四虎影院中文字幕| 欧美亚洲综合一区| 美国一级片在线免费观看视频 | 日韩一区二区三区在线免费观看| 高清视频在线观看一区| 小处雏高清一区二区三区| 美女一区二区三区视频| 97久久精品人人爽人人爽蜜臀| 91高清免费观看| 69堂国产成人免费视频| 成人免费在线电影| 国产97免费视| 亚洲视频分类| 99久久久无码国产精品6| 不卡av免费在线观看| 国产一级片免费| 日韩欧美国产电影| 色图在线观看| 97人人模人人爽人人少妇 | 欧美日韩在线视频一区二区三区| 国产精一品亚洲二区在线视频| 日韩av片在线免费观看| 在线精品亚洲一区二区不卡| 日韩美女一级视频| 欧美中文在线观看国产| 妖精视频一区二区三区| 久久久免费视频网站| 91视频xxxx| 在线观看免费av片| 亚洲深夜福利网站| 日韩成人高清| 亚洲欧洲精品在线| 精品一区二区三区久久| 熟女少妇a性色生活片毛片| 西野翔中文久久精品字幕| 久久99视频免费| 久久天堂久久| 超碰超碰超碰超碰超碰| 懂色中文一区二区在线播放| 精品视频久久久久| 亚洲国产一区二区三区在线观看| xxxcom在线观看| 久久99导航| 丝袜美腿一区二区三区| 国产三级黄色片| 91精品国产综合久久久久久漫画| 直接在线观看的三级网址| 国产精品一国产精品最新章节| 精品999网站| 日韩av在线看免费观看| 欧美撒尿777hd撒尿| 国产素人视频在线观看| 国产高清一区视频| 另类激情亚洲| www久久久久久久| 日韩欧美在线网站| 成人黄色动漫| 清纯唯美一区二区三区| 精品影视av免费| 国产一级一级片| 亚洲人精选亚洲人成在线| 黄色成人在线观看网站| 久久久99精品视频| 91麻豆国产自产在线观看| 制服丝袜在线一区| 大胆人体色综合| 婷婷综合一区| 91亚洲精品久久久蜜桃借种| 亚洲成av人片在线| 国产日韩精品在线看| 91久久久久久久久久| 野花国产精品入口| 国精产品一区一区| 欧美精品一区二区三区很污很色的 | 韩剧1988在线观看免费完整版| 竹菊久久久久久久| 特级黄色片视频| 欧美日韩一区二区三区在线免费观看| av大片在线播放| 国产伦精品一区二区三区视频孕妇| 久久综合影视| 久久免费精彩视频| 中文字幕日韩视频| 日韩在线你懂的| 亚洲av无一区二区三区久久| 91精品办公室少妇高潮对白| 黄页网站在线观看免费| 亚洲精品二区|