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

為什么需要插入意向鎖?

數據庫 MySQL
本文基于 MySQL 8.0.32 源碼,存儲引擎為 InnoDB,事務隔離級別為可重復讀。

不久之前,有位讀者問了一個關于 insert intention waiting 的問題,回答過程中,我還把意向鎖(intention lock)和插入意向鎖(insert intention lock)搞混了,實際上這是 2 種不同類型的鎖。

為此,我研究了下插入意向鎖,于是有了這篇文章。

本文基于 MySQL 8.0.32 源碼,存儲引擎為 InnoDB,事務隔離級別為可重復讀。如需轉載,請聯系『一樹一溪』公眾號作者,轉載后請標明來源。

正文

1、什么是插入意向鎖?

我們先來看看官方定義:插入意向鎖是由 INSERT 操作在插入記錄之前加的一種間隙鎖。

官方文檔原文如下:

An insert intention lock
  is a type of gap lock
  set by INSERT operations
  prior to row insertion.

我們再來看看插入意向鎖的加鎖代碼:

// 為了方便閱讀,代碼格式做了調整。
// storage/innobase/lock/lock0lock.cc
dberr_t lock_rec_insert_check_and_lock(...)
{
  ...
  const ulint type_mode = 
              LOCK_X | 
              LOCK_GAP | 
              LOCK_INSERT_INTENTION;

  const auto conflicting =
      lock_rec_other_has_conflicting(type_mode, block, heap_no, trx);
  ...
  if (conflicting.wait_for != nullptr) {
    RecLock rec_lock(thr, index, block, heap_no, type_mode);

    trx_mutex_enter(trx);

    err = rec_lock.add_to_waitq(conflicting.wait_for);

    trx_mutex_exit(trx);
  }
  ...
}

type_mode 包含了 3 個標志位:

  • LOCK_X,表示這是個排他鎖。
  • LOCK_GAP,表示這是個間隙鎖。
  • LOCK_INSERT_INTENTION,表示這是插入意向鎖。

代碼和官方文檔可以相互印證:插入意向鎖是一種排他(LOCK_X)間隙鎖(LOCK_GAP)。

2、為什么需要插入意向鎖?

通過前面的介紹,我們知道了:插入意向鎖本質上是間隙鎖。

那么,問題來了:既然有了間隙鎖,那還弄個插入意向鎖干啥?

答案當然是有用了。

有啥用?

說來話長。

那我們就長話長說,先從間隙鎖說起。

我們先來看一下間隙鎖的特點:

  • 間隙鎖的唯一用途是阻止其它事務插入記錄到間隙中,以實現可重復讀。
  • 共享間隙鎖、排他間隙鎖的功能完全一樣。
  • 間隙鎖可以共存,一個事務持有某個間隙的鎖,該間隙鎖釋放之前,其它事務也可以申請并獲得該間隙的鎖,并且不區分共享鎖還是排他鎖。

由于多個間隙鎖可以共存,插入記錄需要加鎖時,如果直接使用間隙鎖,一個事務鎖住了某個間隙,其它事務執行 INSERT 語句還可以插入記錄到該間隙中,也就違背了間隙鎖用于實現可重復讀這一特點了。

為了解決這個問題,InnoDB 引入了插入意向鎖。

上一小節,我們從 lock_rec_insert_check_and_lock() 代碼看到了插入間隙鎖的 type_mode:

const ulint type_mode = 
            LOCK_X | 
            LOCK_GAP | 
            LOCK_INSERT_INTENTION;

實際上,插入意向鎖就是在排他間隙鎖的基礎上打了個 LOCK_INSERT_INTENTION 標志。

我們通過具體的應用場景來看一下 LOCK_INSERT_INTENTION 標志的作用機制:

圖片圖片

事務 T 執行 INSERT 語句,插入記錄 R 到某個表的記錄 R1 之前。

如果其它事務對 R1 前面的間隙加了(共享或排他)間隙鎖,事務 T 會申請對該間隙加插入意向鎖。

因為插入意向鎖有 LOCK_INSERT_INTENTION 標志,識別到這個標志,InnoDB 就會讓 INSERT 語句進入等待狀態。

直到 R1 前面間隙的鎖被釋放,INSERT 語句才能獲得插入意向鎖,插入記錄 R 到 R1 前面的間隙中。

通過 LOCK_INSERT_INTENTION 標志的介紹可以看到,插入記錄時,只有使用插入意向鎖,其它事務持有的間隙鎖才能阻止插入操作插入記錄到間隙中。

也就是說,間隙鎖需要插入意向鎖的配合,才能實現可重復讀,這就是為什么需要插入意向鎖的原因了。

3、插入意向鎖和其它鎖的關系

為了介紹這一小節的內容,我們需要先做點準備工作。

創建測試表:

USE `test`;

CREATE TABLE `t1` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `i1` int DEFAULT '0',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

插入測試數據:

INSERT INTO `t1`(`id`, `i1`)
VALUES (10, 101), (20, 201), (30, 301);

數據如下:

通過以下命令創建 3 個數據庫連接備用:

mysql -h127.0.0.1 -uroot -D test

3 個連接分別命名為 session 1、session 2、session 3。

(1)間隙鎖會阻塞插入意向鎖

我們可以按以下步驟,驗證間隙鎖會阻塞插入意向鎖。

第 1 步,在 session 1 中執行以下 SQL,對 id = 20 的記錄加間隙鎖:

BEGIN;

SELECT * FROM `t1`
WHERE `id` > 10 AND `id` < 20
FOR SHARE;

SELECT 語句會鎖住 id = 20 的記錄前面的間隙。

第 2 步,在 session 2 中執行以下 SQL,插入一條記錄到 id = 20 的記錄之前:

BEGIN;

INSERT INTO `t1`(`id`, `i1`)
VALUES (12, 121);

INSERT 語句發現 id = 20 的記錄前面的間隙被鎖住了,會申請對該間隙加插入意向鎖,并進入等待狀態。

第 3 步,在 session 3 中執行以下 SQL,查看加鎖情況:

SELECT
  `engine_transaction_id` as `trx_id`,
  `object_name` as `table`,
  `index_name` as `index`,
  `lock_type`, `lock_mode`,
  `lock_status`, `lock_data`
FROM `performance_schema`.`data_locks`
WHERE `lock_type` = 'RECORD'
AND object_schema = 'test';

圖片圖片

通過加鎖情況,我們可以確認間隙鎖會阻塞插入意向鎖:

  • session 1 的 SELECT 語句持有間隙鎖(lock_mode 包含 GAP)。
  • session 2 的 INSERT 語句正在等待插入意向鎖(lock_mode 包含 INSERT_INTENTION)。

最后,在 session 1、session 2 中執行 ROLLBACK 語句,回滾事務,為后面的驗證工作做準備。

(2)插入意向鎖不會阻塞間隙鎖

我們可以按以下步驟,驗證插入意向鎖不會阻塞間隙鎖。

第 1 步,在 session 1 中執行以下 SQL,對 id = 20 的記錄加間隙鎖:

BEGIN;

SELECT * FROM `t1`
WHERE `id` > 10 AND `id` < 20
FOR SHARE;

SELECT 語句會鎖住 id = 20 的記錄前面的間隙。

第 1 步加間隙鎖,是為了引發第 2 步的 INSERT 語句加插入意向鎖。

第 2 步,在 session 2 中執行以下 SQL,插入一條記錄到 id = 20 的記錄之前:

BEGIN;

INSERT INTO `t1`(`id`, `i1`)
VALUES (12, 121);

INSERT 語句發現 id = 20 的記錄前面的間隙被鎖住了,會申請對該間隙加插入意向鎖,并進入等待狀態。

第 3 步,在 session 1 中執行以下 SQL,回滾事務:

ROLLBACK;

SELECT 語句釋放間隙鎖之后,第 2 步 session 2 中的 INSERT 語句成功獲得插入意向鎖。

第 4 步,在 session 1 中執行以下 SQL,對 id = 20 的記錄加間隙鎖:

BEGIN;

SELECT * FROM `t1`
-- `id` > xx 中的 xx 取值為 15
WHERE `id` > 15 AND `id` < 20
FOR SHARE;

注意:因為第 2 步的 INSERT 語句在 id = 10 ~ 20 之間插入了 id = 12 的記錄,第 4 步 WHERE 條件 id > xx 中的 xx 必須大于 12,否則會觸發 id = 12 的記錄上的隱式鎖邏輯,導致 SELECT 語句等待 id = 20 的記錄上的 next-key 鎖。

第 5 步,在 session 3 中執行以下 SQL,查看加鎖情況:

SELECT
  `engine_transaction_id` as `trx_id`,
  `object_name` as `table`,
  `index_name` as `index`,
  `lock_type`, `lock_mode`,
  `lock_status`, `lock_data`
FROM `performance_schema`.`data_locks`
WHERE `lock_type` = 'RECORD'
AND object_schema = 'test';

通過加鎖情況,我們可以確認插入意向鎖不會阻塞間隙鎖:

  • session 2 中,第 2 步的 INSERT 語句持有插入意向鎖(lock_mode 包含 INSERT_INTENTION)。
  • session 1 中,第 4 步的 SELECT 語句成功獲得了間隙鎖(lock_mode 包含 GAP)。

最后,在 session 1、session 2 中執行 ROLLBACK 語句,回滾事務,為后面的驗證工作做準備。

(3)插入意向鎖相互之間不會阻塞

我們可以按以下步驟,驗證插入意向鎖相互之間不會阻塞。

第 1 步,在 session 1 中執行以下 SQL,對 id = 20 的記錄加間隙鎖:

BEGIN;

SELECT * FROM `t1`
WHERE `id` > 10 AND `id` < 20
FOR SHARE;

SELECT 語句會鎖住 id = 20 的記錄前面的間隙。

執行這一步是為了讓第 2、3 步的 INSERT 語句都申請對 id = 20 的記錄前面的間隙加插入意向鎖,并進入等待狀態。

第 2 步,在 session 2 中執行以下 SQL,插入一條記錄到 id = 20 的記錄之前:

BEGIN;

INSERT INTO `t1`(`id`, `i1`)
VALUES (12, 121);

INSERT 語句發現 id = 20 的記錄前面的間隙被鎖住了,會申請對該間隙加插入意向鎖,并進入等待狀態。

第 3 步,在 session 3 中執行以下 SQL,插入一條記錄到 id = 20 的記錄之前:

BEGIN;

INSERT INTO `t1`(`id`, `i1`)
VALUES (15, 151);

INSERT 語句發現 id = 20 的記錄前面的間隙被鎖住了,會申請對該間隙加插入意向鎖,并進入等待狀態。

第 4 步,在 session 1 中執行以下 SQL,查看鎖等待情況:

SELECT
  `engine_transaction_id` as `trx_id`,
  `object_name` as `table`,
  `index_name` as `index`,
  `lock_type`, `lock_mode`,
  `lock_status`, `lock_data`
FROM `performance_schema`.`data_locks`
WHERE `lock_type` = 'RECORD'
AND object_schema = 'test';

圖片圖片

由于 id = 20 的記錄前面的間隙被第 1 步的 SELECT 語句鎖住了,第 2、3 步的 INSERT 語句正在等待該間隙的插入意向鎖。

第 5 步,在 session 1 中執行回滾語句,釋放 id = 20 的記錄上的間隙鎖:

ROLLBACK;

第 6 步,在 session 1 中執行以下 SQL,查看加鎖情況:

SELECT
  `engine_transaction_id` as `trx_id`,
  `object_name` as `table`,
  `index_name` as `index`,
  `lock_type`, `lock_mode`,
  `lock_status`, `lock_data`
FROM `performance_schema`.`data_locks`
WHERE `lock_type` = 'RECORD'
AND object_schema = 'test';

第 2、3 步的 INSERT 語句同時獲得了 id = 20 的記錄前面間隙的插入意向鎖。

通過加鎖情況,我們可以確認插入意向鎖相互之間不會阻塞。

3.4 next-key 鎖和插入意向鎖會相互阻塞嗎?

對于 next-key 鎖和插入意向鎖是否會相互阻塞,這里只給出結論:

  • next-key 鎖會阻塞插入意向鎖。
  • 插入意向鎖不會阻塞 next-key 鎖。

感興趣的讀者可以按照 3.1、3.2 小節的步驟自行測試,畢竟自己動手獲得的知識才會記得更牢。

測試時,需要把 SELECT 語句 WHERE 條件中的 id < 20 替換為 id <= 20,確保 SELECT 語句加的是 next-key 鎖而不是普通的間隙鎖。

4. 怎么知道加了插入意向鎖?

我們通過查詢 performance_schema.data_locks,可以知道某個事務是否申請了對某個間隙加插入間隙鎖,這種方式我們在上一小節中已經使用過多次。

如果查詢結果中某條記錄的 lock_mode 字段包含 INSERT_INTENTION,說明對應的事務申請了加插入意向鎖。

lock_status = WAITING 說明正在等待插入意向鎖。

lock_status = GRANTED 說明已經獲得了插入意向鎖。

還有一種方式,只能看到正在等待的插入意向鎖,無法看到已經獲得的插入意向鎖。

執行 SHOW ENGINE InnoDB STATUS 語句,部分結果如下:

-- 為了方便閱讀,對以下結果的格式做了調整
-- TRX HAS BEEN WAITING 2 SEC FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 0 page no 47
       n bits 72
       index PRIMARY of table `test`.`t1`

       trx id 133955
       lock_mode X
       locks gap before rec
       insert intention waiting

通過以上結果,我們可以得到以下信息:

事務 133955 正在等待(waiting)獲取插入意向鎖(insert intention):

  • lock_mode X 對應 type_mode 中的 LOCK_X。
  • locks gap before rec 對應 type_mode 中的 LOCK_GAP。
  • insert intention 對應 type_mode 中的 LOCK_INSERT_INTENTION。

5、總結

在排他(LOCK_X)間隙鎖(LOCK_GAP)的基礎上增加 LOCK_INSERT_INTENTION 標志,就得到了插入意向鎖,所以,從本質上來說,插入意向鎖是個特殊的間隙鎖。

間隙鎖需要插入意向鎖的配合,才能阻塞其它事務插入記錄到某個間隙中,從而實現可重復讀,這就是需要插入意向鎖的原因了。

責任編輯:姜華 來源: 一樹一溪
相關推薦

2022-11-28 14:27:17

插入意向鎖age

2024-05-15 09:23:45

MySQL排他鎖共享鎖

2024-10-30 10:38:08

2023-12-28 17:33:25

意向鎖MySQL開發者

2022-04-21 10:39:29

InnoDB意向鎖SQL

2025-06-04 02:55:00

MySQL意向鎖記錄鎖

2022-12-27 17:40:57

意向鎖MySQLInnoDB

2024-04-16 17:41:01

人工智能大型語言模型

2022-07-20 08:06:57

MySQL表鎖Innodb

2011-02-16 09:42:04

DevOps

2020-12-15 06:57:24

java服務器

2017-08-30 18:15:54

MySql

2015-04-16 15:42:21

關系型數據庫NoSQL

2022-06-28 14:54:26

加密貨幣數組貨幣安全

2024-09-19 13:00:26

悲觀鎖SQL樂觀鎖

2022-05-07 07:35:44

工具讀寫鎖Java

2022-05-18 08:25:59

MySQLutf8字符集數據庫

2023-09-05 09:49:03

2021-02-08 08:34:55

存儲列式 OLAP

2022-08-26 08:00:19

企業架構IT
點贊
收藏

51CTO技術棧公眾號

www.亚洲视频| 亚洲免费伊人电影在线观看av| 国产成人在线一区| 一本在线免费视频| 成人盗摄视频| 日本韩国一区二区| 美女黄色片网站| 手机看片福利在线| 免费观看一级特黄欧美大片| 久久99精品视频一区97| 免费在线观看你懂的| 日韩在线电影| 福利视频一区二区| 97精品国产97久久久久久粉红| 少妇高潮一区二区三区69| 日韩影院精彩在线| 午夜精品免费视频| 欧美肥妇bbwbbw| 亚洲精品中文字幕99999| 欧美猛男男办公室激情| 日本在线观看a| 亚洲大胆人体大胆做受1| 久久久亚洲国产美女国产盗摄| 91探花福利精品国产自产在线| 日本特级黄色片| 国产精品videossex久久发布| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 日本一区二区免费视频| 国产成人精选| 人人超碰91尤物精品国产| 日韩中文字幕不卡| 久热精品在线视频| 成人做爰69片免网站| 日韩精品欧美大片| 精品国产亚洲一区二区三区在线观看 | 插我舔内射18免费视频| 国产免费区一区二区三视频免费 | 亚洲国产高清aⅴ视频| 久久99国产精品99久久| 成人av免费播放| 黑人巨大精品欧美黑白配亚洲| 国产精品aaaa| 在线观看 亚洲| 一区二区三区精品视频在线观看| 欧美黄色成人网| 欧美成人免费看| 亚洲精品久久| 操人视频在线观看欧美| 国产破处视频在线观看| 日韩在线第七页| 在线看日韩av| 国产真人真事毛片视频| 日韩影院二区| www高清在线视频日韩欧美| 999久久久国产| 欧美国产一级| 国产一区二区在线看| 一区二区三区免费网站| 在线观看17c| 一色桃子av在线| 亚洲女同ⅹxx女同tv| 艳母动漫在线免费观看| 国产cdts系列另类在线观看| 中文字幕中文乱码欧美一区二区 | 国产精品久久久久久久app| 一级做a爰片久久毛片| 久久亚洲欧美| 国产精品扒开腿做| 中文字幕免费在线看| 免费国产亚洲视频| 91精品视频免费看| 亚洲黄色片视频| www.亚洲人| 欧美一区1区三区3区公司| 国产污视频在线| 日韩理论片网站| japanese在线播放| 春色校园综合激情亚洲| 一本大道av伊人久久综合| 少妇人妻互换不带套| 欧美亚洲黄色| 亚洲成人av资源网| 国产成人福利在线| 国产精品毛片久久| 久久久之久亚州精品露出| 特级毛片www| 蜜臀久久99精品久久久久久9| 91久久嫩草影院一区二区| 亚洲黄色在线播放| 久久久精品国产免大香伊| 亚洲一区二区三区精品动漫| 在线āv视频| 欧美午夜无遮挡| 极品粉嫩美女露脸啪啪| 鲁大师精品99久久久| 在线播放日韩精品| 久久久久无码精品国产| 日日摸夜夜添夜夜添亚洲女人| 亚洲va欧美va在线观看| 三级视频在线播放| 亚洲欧美日韩在线不卡| 国产精品沙发午睡系列| 婷婷久久免费视频| 日韩精品有码在线观看| 欧美在线视频第一页| 久久精品毛片| 成人av免费电影| аⅴ资源新版在线天堂| 亚洲444eee在线观看| 久热在线视频观看| 国产欧美久久一区二区三区| 欧美理论片在线观看| 欧美日韩 一区二区三区| 成人在线视频一区二区| 一区精品视频| 三上悠亚激情av一区二区三区 | 日本精品久久久久| 日韩毛片视频在线看| 色综合av综合无码综合网站| 日韩在线亚洲| 中文字幕精品网| 台湾佬中文在线| 波多野结衣一区二区三区| 爱爱爱视频网站| 成人自拍视频网| 亚洲国产天堂久久国产91| avove在线播放| 另类小说视频一区二区| 日本在线播放不卡| 中文字幕在线官网| 精品无码久久久久久国产| 免费一级全黄少妇性色生活片| 麻豆免费精品视频| 手机看片福利永久国产日韩| 激情黄产视频在线免费观看| 精品久久人人做人人爱| 无码人妻精品一区二区三区夜夜嗨| 奇米一区二区三区av| 精品卡一卡二| 白浆在线视频| 亚洲第一偷拍网| 久久高清无码视频| 国产精品系列在线观看| 看全色黄大色大片| 91精品国产一区二区在线观看| 中文字幕在线国产精品| 亚洲一卡二卡在线| 中文字幕色av一区二区三区| 91高清国产视频| 欧美激情黄色片| 成人黄色在线播放| 免费人成在线观看播放视频| 欧美视频一区二区三区四区 | 7777免费精品视频| 天堂网在线播放| 精品福利在线看| 国产精品成人一区二区三区电影毛片| 亚洲在线日韩| 欧美极品一区二区| 日本免费久久| 色噜噜狠狠色综合网图区| 一级日韩一级欧美| 一区二区三区在线视频观看58 | 在线不卡免费视频| 综合激情成人伊人| 国产伦精品一区二区三区妓女下载 | 激情深爱一区二区| 懂色av粉嫩av蜜臀av| 日韩中文字幕在线一区| 亚州av一区二区| 免费在线黄色网址| 欧美日韩免费在线视频| 成人免费毛片xxx| 成人综合婷婷国产精品久久| 男女高潮又爽又黄又无遮挡| 精品国内自产拍在线观看视频 | 国产日产精品1区| 久久婷五月综合| 在线中文一区| 精品一区二区国产| 巨胸喷奶水www久久久免费动漫| 中文字幕亚洲无线码a| 国产人妻精品一区二区三区| 亚洲高清一区二区三区| 欧美熟妇一区二区| 麻豆成人免费电影| 777av视频| 欧美精品一区二区三区精品| 亚洲va久久久噜噜噜| 厕沟全景美女厕沟精品| 日韩中文理论片| 日本黄色大片视频| 欧美日韩国产经典色站一区二区三区| 九九精品在线观看视频| 久久久99精品久久| 农村末发育av片一区二区| 噜噜噜91成人网| 超薄肉色丝袜足j调教99| 欧美交a欧美精品喷水| 国产日韩换脸av一区在线观看| 男人天堂亚洲| 中文字幕欧美日韩精品| 国产 欧美 精品| 欧美午夜免费电影| 日韩欧美a级片| 一区在线观看视频| 91久久免费视频| 国产精品一区二区免费不卡 | 美女毛片在线观看| 国产欧美日韩综合| 国产 xxxx| 国产精品69毛片高清亚洲| www.日本xxxx| 亚洲麻豆视频| 成人在线视频一区二区三区| 九热爱视频精品视频| 高清视频一区二区三区| 成人免费91| 国产美女久久精品香蕉69| 在线免费三级电影网站| 国内精品久久久久久中文字幕| 午夜视频成人| 揄拍成人国产精品视频| 性感美女一级片| 精品国产在天天线2019| a天堂在线视频| 91精品免费在线| 亚洲天堂手机在线| 欧美综合亚洲图片综合区| 国产精品自拍99| 五月婷婷久久综合| 五月天婷婷丁香| 亚洲精品视频在线观看免费| 91无套直看片红桃在线观看| 久久久久久久久伊人| 亚洲欧美日本一区| av激情综合网| 中文在线永久免费观看| 成人av综合在线| 精品人妻二区中文字幕| 国产suv一区二区三区88区| 亚洲黄色片免费看| 国产一区二区三区在线观看免费视频 | 好吊色欧美一区二区三区| aiss精品大尺度系列| 成人在线观看av| 给我免费播放日韩视频| 国产高清精品一区二区三区| 99香蕉久久| 激情小说网站亚洲综合网| 国产精品色在线网站| 韩日午夜在线资源一区二区| 欧美天堂影院| 老司机精品福利在线观看| 亚洲资源网你懂的| 日本在线观看一区| 日韩系列欧美系列| 欧洲美女和动交zoz0z| 自拍日韩欧美| 97超碰在线人人| 9色精品在线| jizzjizzxxxx| 奇米精品一区二区三区在线观看一 | 欧美日韩生活片| 中文字幕一区二区三| 国产天堂av在线| 一区二区三区中文免费| 久久99精品波多结衣一区| 色婷婷综合久久久| 亚洲永久精品视频| 欧美v日韩v国产v| 亚洲 欧美 精品| 这里只有精品视频在线| 黄色网址视频在线观看| 久久久久久久一区二区| 欧美大胆性生话| 成人免费网视频| 国产精品videossex| 日韩欧美精品一区二区| 亚洲国产精品综合久久久 | 免费网站在线观看人| 97精品国产97久久久久久| 精品肉辣文txt下载| 2020国产精品久久精品不卡| 欧美天堂影院| 国产又粗又硬又长| 久久久777| 久久久久久久久久毛片| 91老司机福利 在线| 黄色av片三级三级三级免费看| 亚洲精品国产第一综合99久久| 激情五月色婷婷| 欧美军同video69gay| 天天操天天射天天| 久久久999国产精品| 狠狠躁少妇一区二区三区| 国产日韩欧美在线看| 东京久久高清| 一区二区三区四区五区视频| 亚洲精品九九| 亚洲制服中文字幕| 久久先锋资源网| 免看一级a毛片一片成人不卡| 欧美性猛交xxxx乱大交| www.av黄色| 自拍亚洲一区欧美另类| 天堂av在线| 2019国产精品视频| 日韩中文欧美| 国产成人精品无码播放| av在线不卡电影| 欧美色图亚洲视频| 欧美日本乱大交xxxxx| 日本大臀精品| 午夜精品久久久99热福利| 欧美日韩卡一| 色一情一乱一伦一区二区三欧美 | 91极品女神在线| 日韩精品视频在线看| 亚洲高清精品中出| 久久久噜噜噜| 日韩aaaaa| 亚洲一级二级在线| 国产黄色免费大片| 色青青草原桃花久久综合 | 免费观看久久久久| 国产精品v片在线观看不卡| 西野翔中文久久精品国产| 日韩欧美精品免费| 国产精品一二三区在线| 99久久久无码国产精品不卡| 欧洲精品在线观看| 丁香婷婷在线观看| 国产精品吊钟奶在线| 九九热精品视频在线观看| 北条麻妃在线观看| 97精品久久久午夜一区二区三区| 国产极品在线播放| 亚洲国产精品免费| 色戒汤唯在线| 欧美精品在线一区| 久久最新视频| 精品无码人妻一区二区免费蜜桃 | 伊人网视频在线| 国产一区二区三区在线播放免费观看| 最新欧美色图| 日本视频一区二区不卡| 石原莉奈在线亚洲二区| 国产一区二区三区四区五区六区| 色成人在线视频| xxxxx日韩| 成人av资源在线播放| 我不卡神马影院| 波多野结衣中文字幕在线播放| 亚洲精品视频观看| 亚洲精品成av人片天堂无码| 欧美极品少妇xxxxⅹ喷水| 超碰成人在线观看| 亚洲熟妇无码另类久久久| 久久亚洲综合色一区二区三区| 精品人妻一区二区色欲产成人| 国产丝袜一区视频在线观看 | 狠狠干综合网| 女同性恋一区二区三区| 欧美色播在线播放| 国产高清av在线| 91久久在线视频| 亚洲精品色图| jizz中文字幕| 制服丝袜激情欧洲亚洲| 男人天堂亚洲天堂| 日本高清不卡一区二区三| 青青草国产精品97视觉盛宴| 免费成人深夜夜行网站| 精品国产91乱码一区二区三区 | 国产一区美女| 一二三不卡视频| 欧美日韩国产小视频在线观看| 亚洲精品天堂| 欧洲精品在线一区| 国产伦精品一区二区三区免费迷 | 99精品欧美| 国产极品视频在线观看| 欧美一区二区久久| 日韩脚交footjobhd| 亚洲午夜精品一区二区| 国产成人精品免费| 亚洲精品一区二三区| 欧美精品生活片| 精品国产一区探花在线观看| 在线观看欧美一区二区| 91激情在线视频| 青草影视电视剧免费播放在线观看| 免费毛片一区二区三区久久久| 久久99国产精品麻豆| 在线观看精品国产| 久久在精品线影院精品国产| 亚洲+变态+欧美+另类+精品| www.51色.com| 91激情在线视频|