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

MySQL 核心模塊揭秘

數據庫 MySQL
如果事務 T 想要讀取某個表的數據,同時允許其它事務讀取這個表的數據,但是不允許其它事務改變這個表的數據,事務 T 可以對這個表加表級別的共享鎖。

1. 概述

MySQL 采用插件化存儲引擎,從這個角度,整體結構可以分為兩層:

  • server 層。
  • 存儲引擎。

基于以上兩層結構,MySQL 的鎖也可以分為兩大類。

server 層的鎖,就是讓我們頭痛不已的元數據鎖(MDL)。

存儲引擎的鎖,取決于各存儲引擎的實現。

InnoDB 支持表鎖、行鎖、謂詞鎖(用于空間索引,我們不會介紹)。

表鎖分為共享鎖(S)、排他鎖(X)、意向共享鎖(IS)、意向排他鎖(IX)、AUTO-INC 鎖。

行鎖分共享鎖(S)、排他鎖(X),以及有點特殊的插入意向鎖(LOCK_INSERT_INTENTION)。

行級別共享鎖(S)和排他鎖(X)又都可以細分為三類:

  • 普通記錄鎖(LOCK_REC_NOT_GAP)。
  • 間隙鎖(LOCK_GAP)。
  • Next-Key 鎖(LOCK_ORDINARY)。

接下來,我們就進入本文的主題,聊聊 InnoDB 的表鎖。

2. 共享鎖 & 排他鎖

顧名思義,共享鎖指的是多個事務可以同時對同一個表加的鎖,排他鎖指的是同一時刻只有一個事務能對某個表加的鎖。

如果事務 T 想要讀取某個表的數據,同時允許其它事務讀取這個表的數據,但是不允許其它事務改變這個表的數據,事務 T 可以對這個表加表級別的共享鎖。

如果事務 T 想要改變(插入、更新、刪除)某個表的數據,并且不允許其它任何事務讀取或者改變(插入、更新、刪除)這個表的數據,事務 T 可以對這個表加表級別的排他鎖。

了解定義之后,我們再來看看怎么加表級別的共享鎖和排他鎖。

以給 t1 表加表級別的共享鎖為例,先執行以下 SQL 加鎖:

lock tables t1 read;

然后,執行以下 SQL 查看加鎖結果:

select * from performance_schema.data_locks
where object_name = 't1'\G

-- 加鎖結果如下
0 rows in set

咦!lock tables 語句并沒有給 t1 表加上表級別的共享鎖,這是怎么回事?

這個問題代碼里有說明:從 MySQL 4.1.9 開始,如果系統變量 autocommit 的值為 ON,lock tables 語句不會給表加表級別的共享鎖或排他鎖。

實際上,lock tables 語句是否給表加表級別的共享鎖或排他鎖,由 innodb_table_locks、autocommit 兩個系統變量共同決定。

只有同時滿足以下兩個條件,lock tables 語句才會給表加表級別的共享鎖或排他鎖:

  • innodb_table_locks = ON。
  • autocommit = OFF。

因為系統變量 innodb_table_locks 和 autocommit 的默認值都為 ON,所以前面執行的 lock tables 語句不會給 t1 表加表級別的共享鎖。

我們先把系統變量 autocommit 的值修改為 OFF:

set autocommit = OFF;

show variables like 'autocommit';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+

再執行一次 lock tables 語句:

lock tables t1 read;

然后查看加鎖結果:

***************************[ 1. row ]***************************
ENGINE                | INNODB
ENGINE_LOCK_ID        | 4708798376:1415:4561418528
ENGINE_TRANSACTION_ID | 281479685509032
THREAD_ID             | 53
EVENT_ID              | 15
OBJECT_SCHEMA         | test
OBJECT_NAME           | t1
PARTITION_NAME        | <null>
SUBPARTITION_NAME     | <null>
INDEX_NAME            | <null>
OBJECT_INSTANCE_BEGIN | 4561418528
LOCK_TYPE             | TABLE
LOCK_MODE             | S
LOCK_STATUS           | GRANTED
LOCK_DATA             | <null>

此時,我們可以看到 lock tables 語句給 t1 表加了表級別的共享鎖。

看到這里,大家可能會有個疑問:autocommit = OFF 時,lock tables ... read 不給表加表級別的共享鎖,怎么阻止其它事務改變表的數據?

答案是 MySQL 會給表加元數據鎖。

不管系統變量 autocommit 的值是什么,我們執行 lock tables 語句之后,都可以看到 MySQL 給 t1 表加了元數據鎖:

select * from performance_schema.metadata_locks
where object_name = 't1'\G

***************************[ 1. row ]***************************
OBJECT_TYPE           | TABLE
OBJECT_SCHEMA         | test
OBJECT_NAME           | t1
COLUMN_NAME           | <null>
OBJECT_INSTANCE_BEGIN | 5143798864
LOCK_TYPE             | SHARED_READ_ONLY
LOCK_DURATION         | TRANSACTION
LOCK_STATUS           | GRANTED
SOURCE                | sql_parse.cc:6094
OWNER_THREAD_ID       | 53
OWNER_EVENT_ID        | 28

通過以上結果,我們可以看到 MySQL 給 t1 表加了類型為 SHARED_READ_ONLY 的元數據鎖。

這個元數據鎖限制了任何事務只能讀取,不能改變(插入、更新、刪除)t1 表的數據。

看到這里,大家可能會有另一個疑問:server 層的元數據鎖,既然能實現表級別的共享鎖和排他鎖的功能,InnoDB 為什么還要支持表級別的共享鎖和排他鎖,這不是多此一舉嗎?

還真不是。

根據代碼里的描述,DDL 語句修改某個表結構的過程中,雖然會加元數據鎖保證其它事務不會讀寫這個表,但是有兩種特殊場景只在 InnoDB 內部實現,不會加元數據鎖。

這兩種特殊場景如下:

  • 外鍵檢查。
  • 崩潰恢復過程中收集未提交完成的事務。

為了保證 DDL 語句和上面兩種場景同時操作同一個表時不會出現問題,它們都會給表加表級別的共享鎖或排他鎖。

所以,InnoDB 支持表級別的共享鎖和排他鎖是必要的。

通過前面的介紹,我們可以看到,InnoDB 表級別的共享鎖和排他鎖并不常用,因為元數據鎖在大部分場景下能夠代替它們。

由于有些特殊場景的存在,雖然不常用,但是 InnoDB 也不能沒有表級別的共享鎖和排他鎖。

3. 意向共享鎖 & 意向排他鎖

有了表級別的共享鎖和排他鎖,怎么又弄出來個意向共享鎖和意向排他鎖,它們之間到底是什么關系?

意向共享鎖、意向排他鎖,其實和表級別的共享鎖、排他鎖沒什么關系,它們是用來和行級別的共享鎖、排他鎖配合使用的。

如果我們經常關注表的加鎖情況,可能會有如下發現:

  • select ... lock in share mode 除了會加行級別的共享鎖,還會加表級別的意向共享鎖。
  • select ... for update 除了會加行級別的排他鎖,還會表加級別的意向排他鎖。
  • update、delete 除了會加行級別的排他鎖,還會加表級別的意向排他鎖。
  • insert 也會加表級別的意向排他鎖。

我們以第一種為例,來看看加鎖情況:

begin;
select * from t1 where id = 10
lock in share mode;

-- 查看加鎖情況
select
  object_name, lock_type, lock_mode,
  lock_status, lock_data
from performance_schema.data_locks
where object_name = 't1'\G

***************************[ 1. row ]***************************
object_name | t1
lock_type   | TABLE
lock_mode   | IS
lock_status | GRANTED
lock_data   | <null>
***************************[ 2. row ]***************************
object_name | t1
lock_type   | RECORD
lock_mode   | S,REC_NOT_GAP
lock_status | GRANTED
lock_data   | 10

從以上加鎖情況可以看到,InnoDB 除了給 t1 表中 id = 10 的記錄加了行級別的共享鎖,還給 t1 表加了表級別的意向共享鎖。

說了這么多,意向共享鎖、意向排他鎖和行級別的共享鎖、排他鎖到底是怎么配合的?

我們先不正面回答這個問題,而是假裝沒有意向共享鎖、意向排他鎖,要怎么解決下面這個場景中的問題。

場景是這樣的:

我們把系統變量 innodb_table_locks 設置為 ON,autocommit 設置為 OFF,然后執行 lock tables t1 read。

執行 lock tables 語句的過程中,InnoDB 會給 t1 表加表級別的共享鎖,但是加鎖之前,InnoDB 要確定沒有事務正在或者將要改變(插入、更新、刪除)t1 表的記錄。

因為事務改變 t1 表的任何記錄之前,都會給這些記錄加行級別的排他鎖。

插入記錄有一點特殊,這里我們暫且忽略插入記錄加鎖的特殊性。

這么一來,InnoDB 要確定沒有事務正在或者將要改變(插入、更新、刪除)t1 表的記錄,只需要確定沒有事務給 t1 表中的記錄加了行級別的排他鎖就可以了。

問題來了:InnoDB 要怎么確定沒有事務給 t1 表中某條或者某些記錄加了行級別的排他鎖?

有一個辦法,就是遍歷所有的記錄鎖,對于每個記錄鎖,都看看它鎖定的是不是 t1 表的記錄。如果是,再看看鎖的類型是不是排他鎖。

這個方法簡單直接,但是有個問題,如果 InnoDB 中有非常多的記錄鎖,遍歷所有記錄鎖消耗的時間就會很長。

顯然,這個簡單直接的方法不太靠譜。

此時,聰明如你,可能會想到另一個方案:采用登記制度,每個事務給 t1 表的記錄加排他鎖之前,先登記一下,表示它將要給 t1 表的記錄加行級別的排他鎖。

不管一個事務要給 t1 表的多少條記錄加行級別的排他鎖,只需要登記一次就行。

這樣九九歸一,原來要遍歷 N 個表的所有行級別的鎖,現在只需要看 N 個表的登記信息就行了,數量急劇減少,效率大幅提升。

采用登記制度之后,InnoDB 只需要看看登記本,就能確定有沒有事務正在或者將要給 t1 表的記錄加行級別的排他鎖,也就能確定有沒有事務正在或者將要改變(插入、更新、刪除)t1 表的記錄了。

前面大白話講的登記制度,就是 InnoDB 加表級別的共享鎖、排他鎖之前,用來確定表中記錄沒有被加上行級別的共享鎖、排他鎖時使用的方案,也就是意向共享鎖、意向排他鎖。

事務對表中某條或者某些記錄加行級別的共享鎖、排他鎖之前,都要先加對應的表級別的意向共享鎖、意向排他鎖。

所以,意向共享鎖、意向排他鎖可以分別看作行級別的共享鎖、排他鎖的登記本。

4. AUTO-INC 鎖

我們建表時,經常會把主鍵字段定義為整型,并且主鍵字段值還是一個遞增的數字序列。

如果我們自己指定插入記錄的主鍵字段值,需要保證插入記錄的主鍵字段值,和表中已有記錄的主鍵字段值不重復,否則插入記錄會失敗。

這么做,我們自己就比較麻煩了。

為了不麻煩我們自己,只好麻煩 MySQL 了。

于是,我們就經常使用 auto_increment 關鍵字把主鍵字段定義為自增字段。

插入記錄時,我們就可以不指定主鍵字段值,而是讓 MySQL 自動生成遞增的主鍵字段值。

官方文檔介紹:MySQL 并不限制只有主鍵索引或者唯一索引才能使用自增字段,非唯一索引也能使用自增字段,只是不推薦這么用。

MySQL 怎么保證自增的主鍵字段值不重復呢?

答案就是加 AUTO-INC 鎖。

AUTO-INC 鎖有三種模式,由系統變量 innodb_autoinc_lock_mode 指定,枚舉值為 0、1、2。

4.1 傳統模式

innodb_autoinc_lock_mode = 0,傳統模式(traditional mode)。

引入系統變量 innodb_autoinc_lock_mode 之前,AUTO-INC 鎖用的就是這種模式。

MySQL 8.0 保留這種模式,主要是為了兼容以前版本的邏輯,供用戶需要時使用。

傳統模式下,如果需要 MySQL 為插入記錄生成自增字段值,生成之前,都需要給自增字段所屬的表加上表級別的 AUTO-INC 鎖。

傳統模式的優點是:MySQL 為同一條 insert 語句插入多條記錄生成的自增字段值是連續的,并且只要主從服務器上 insert 語句的執行順序一致,主從服務器為同一條 insert 語句生成的自增字段值就是相同的,也就意味著基于語句的主從復制是安全的。

世事都有兩面性,傳統模式不只有優點,也有缺點。

傳統模式的缺點是:同一時間,只有一個事務能獲得某個表的表級別的 AUTO-INC 鎖。

插入記錄到同一個表的多條 insert 語句,如果都需要 MySQL 生成自增字段值,這些語句只能串行執行,這會降低 MySQL 的并發能力。

傳統模式為 insert 語句的第一條記錄生成自增字段值之前,就會加表級別的 AUTO-INC 鎖,insert 語句執行完成時,才會釋放。

4.2 連續模式

innodb_autoinc_lock_mode = 1,連續模式(consecutive mode)。

這是 MySQL 8.0 之前的默認值。

連續模式也能保證 MySQL 為同一條 insert 語句插入多條記錄生成的自增字段值是連續的,所以,基于語句的主從復制也是安全的。

連續模式不會像傳統模式那樣,為所有需要生成自增字段值的表都加表級別的 AUTO-INC 鎖,而是會根據 insert 語句的類型加不同級別的鎖。

對于 insert ... select 這種不能事先確定插入記錄數量的語句,連續模式和傳統模式一樣,也會加表級別的 AUTO-INC 鎖。

對于 insert ... values 這種簡單的能事先確定插入記錄數量的語句,就不會加表級別的 AUTO-INC 鎖,只會加個輕量鎖。

所謂輕量鎖,就是生成自增字段值之前,加鎖,生成自增字段值之后,馬上釋放,而不需要等待 insert 語句執行完才釋放。

這種簡單的 insert 語句,不管是插入一條記錄,還是插入多條記錄,都會一次性為所有記錄生成連續的自增字段值。

對于簡單的 insert 語句,還會有一種例外情況:當它要插入記錄的表被其它事務加了表級別的 AUTO-INC 鎖,它就不會加輕量鎖了,而是改為加表級別的 AUTO-INC 鎖,然后排隊等待獲得鎖。

連續模式加的表級別的 AUTO-INC 鎖,同樣也要等待語句執行完成時才釋放。

4.3 交錯模式

innodb_autoinc_lock_mode = 2,交錯模式(interleaved mode)。

這是 MySQL 8.0 的默認值。

交錯模式為所有 insert 語句插入記錄生成的自增字段值,都不會加表級別的 AUTO-INC 鎖,而是加輕量鎖。

對于 insert ... select 這種不能事先確定插入記錄數量的語句,每往目標表中插入一條記錄之前,先加輕量鎖,再生成自增字段值,然后馬上釋放輕量鎖。

插入多條記錄的過程中,如果有其它 insert 語句也生成了自增字段值,會導致 insert ... select 插入多條記錄的自增字段值不是連續的。

交錯模式是三種模式中效率最高的,但是為并發執行的多條 insert 語句生成的自增字段值可能不是連續的。

主從復制集群中,從庫回放 binlog 日志時,即使和主庫執行 insert 語句的順序相同,也可能造成從庫生成的自增字段值和主庫不一致,從而導致主從數據不一致。

所以,交錯模式對基于語句的主從復制不安全。

MySQL 8.0 把 innodb_autoinc_lock_mode 的默認值從 1(連續模式)改為 2(交錯模式),是因為系統變量 binlog_format 的默認值,已經從 8.0 之前的 STATEMENT 改為 ROW,不再需要使用連續模式來保證主從復制的自增字段值的一致性。

5. 總結

InnoDB 表級別的共享鎖和排他鎖并不常用,因為 server 層的元數據鎖在多數場景下代替了它的功能。

意向共享鎖、意向排他鎖是為了和行級別的共享鎖、排他鎖配合使用的,目的是加 InnoDB 表級別的共享鎖、排他鎖的時候,能夠方便快速的判斷表中是否加了行級別的共享鎖、排他鎖。

AUTO-INC 鎖有三種模式:傳統模式、連續模式、交錯模式。

傳統模式、連續模式都能保證為同一條 insert 語句插入多條記錄生成的自增字段值是連續的,對基于語句的主從復制是安全的。

多條 insert 語句并發的情況下,交錯模式為同一條 insert 語句插入多條記錄生成的自增字段值可能不連續,對基于語句的主從復制不安全。

責任編輯:武曉燕 來源: 愛可生開源社區
相關推薦

2024-06-05 11:49:33

2024-04-03 08:20:53

MySQL核心模塊

2024-08-28 08:50:11

MySQL核心模塊

2024-03-27 13:33:00

MySQLInnoDB事務

2024-08-07 14:58:00

MySQL釋放鎖核心模塊

2024-10-16 11:11:51

隔離InnoDB死鎖

2024-05-29 10:17:01

2024-10-30 10:38:08

2024-09-04 08:44:18

MySQL核心模塊

2025-02-26 08:26:38

2024-11-05 10:52:07

2010-01-26 14:04:02

2022-07-12 10:38:25

分布式框架

2025-01-17 08:17:55

2009-07-21 09:06:14

開發團隊Windows 7

2023-08-24 10:33:19

serviceexportsinfo類

2021-06-21 17:00:05

云計算Hologres云原生

2024-05-08 16:54:21

Python編程開發

2025-08-20 16:21:30

2019-01-23 10:42:21

華為云
點贊
收藏

51CTO技術棧公眾號

国产探花在线观看| 啪啪小视频网站| 99国产精品免费网站| 亚洲成人av一区二区三区| 精品视频免费观看| 免费在线不卡av| 午夜精品网站| 日韩经典第一页| 亚洲天堂网2018| 超碰在线资源| 综合在线观看色| 久久伦理网站| aaa一区二区| 首页国产欧美久久| 九九精品视频在线| 亚洲一级片在线播放| 国产精品香蕉| 3d动漫精品啪啪一区二区竹菊| 日韩激情视频一区二区| www免费网站在线观看| 成人黄色网址在线观看| 国产主播欧美精品| 亚洲s码欧洲m码国产av| 欧美 日韩 国产一区二区在线视频| 亚洲美女www午夜| 性一交一黄一片| 国产精品99| 日韩欧美中文在线| 日韩精品视频在线观看视频| 老司机在线看片网av| 久久久久久黄色| 国内精品久久久久久久果冻传媒| 国产精品久久777777换脸| 久久最新视频| 欧洲亚洲妇女av| 免费毛片一区二区三区| 欧美福利专区| 久久精品视频99| 精品熟妇无码av免费久久| 日韩深夜福利| 亚洲精美色品网站| 亚洲色图欧美另类| 亚洲日本va中文字幕| 欧美一区午夜视频在线观看| 日本人69视频| 婷婷久久免费视频| 欧美日韩五月天| www.com黄色片| 精品无人乱码一区二区三区| 色婷婷av一区二区三区gif| 成人av一级片| 92国产精品| 一本高清dvd不卡在线观看| 国产午夜伦鲁鲁| 天天综合av| 日韩欧美亚洲综合| aaa毛片在线观看| 国产精品久久亚洲不卡| 欧洲另类一二三四区| 久久久久国产精品熟女影院| 日本欧美不卡| 欧美色图在线观看| 手机免费av片| 精品视频91| 精品国产一区二区亚洲人成毛片| 特级特黄刘亦菲aaa级| 欧美三级午夜理伦三级在线观看 | 中日韩av在线播放| 日日狠狠久久| 日韩手机在线导航| 美女久久久久久久久| 亚州精品视频| 中文字幕在线精品| 天天色影综合网| 欧美日韩精选| 国产91ⅴ在线精品免费观看| 日韩三级一区二区| 久久精品国产精品亚洲综合| 亚洲自拍在线观看| 天堂av资源在线| 久久久综合激的五月天| 亚洲mv在线看| 伊人222成人综合网| 亚洲国产精品欧美一二99| 北条麻妃在线观看| 亚洲国产精选| 亚洲国产精品免费| аⅴ天堂中文在线网| 欧美 日韩 国产 一区| 欧洲精品在线视频| 国产乱淫a∨片免费视频| 99精品视频一区二区| 日韩欧美在线电影| 国产在线拍揄自揄拍视频 | 无罩大乳的熟妇正在播放| 电影天堂国产精品| 精品美女被调教视频大全网站| 特大黑人巨人吊xxxx| 久久综合国产| 91精品国产高清久久久久久久久 | 亚洲黄色免费看| 538在线一区二区精品国产| www.日本高清| 天天做天天爱天天综合网| 性日韩欧美在线视频| 亚洲无码久久久久| 91在线视频官网| 超碰97在线看| 欧美free嫩15| 亚洲国产精品女人久久久| 精品国产视频在线观看| 久久亚洲不卡| 国产伦精品一区二区三区免| 日本www在线观看| 欧美性猛交xxxx富婆| 国产成人精品一区二区三区在线观看| 国产精选一区| 久久久综合免费视频| 国产精品人人爽| 国产欧美一区二区在线| 男女视频网站在线观看| 激情综合婷婷| 日韩在线欧美在线| 一级黄色大片视频| www.亚洲人| 国产91视频一区| av在线成人| 在线看福利67194| 久久夜色精品国产噜噜亚洲av| 国产成人综合视频| 中文字幕日韩精品一区二区| 婷婷午夜社区一区| 国产丝袜一区二区三区| 国产精品7777| 粉嫩嫩av羞羞动漫久久久| 丰满女人性猛交| 国产精品第一国产精品| 亚洲社区在线观看| 天堂网视频在线| 91免费看视频| 日本www在线播放| 啪啪国产精品| 3344国产精品免费看| 人妻va精品va欧美va| 午夜精品久久久久久久| 无码av免费精品一区二区三区| 欧美一区亚洲| 亚洲xxxx做受欧美| 视频在线这里都是精品| 日韩欧美国产成人一区二区| 久久久精品视频免费观看| 国内不卡的二区三区中文字幕| 中文字幕一区二区中文字幕| 国产精久久一区二区| 久久中文精品视频| 国产成人a人亚洲精品无码| 一区二区三区小说| 欧美熟妇精品一区二区| 亚洲免费成人| 欧美日韩在线精品| 婷婷激情一区| 在线精品播放av| 国产又黄又猛又爽| 一区二区三区在线视频观看58| 久久黄色一级视频| 在线日韩视频| 欧美少妇一区| xxxxx.日韩| 久久成人这里只有精品| 成人高潮片免费视频| 亚洲成av人片在线观看| 大又大又粗又硬又爽少妇毛片| 久久一区二区三区超碰国产精品| 日韩欧美视频第二区| 精品一区91| 97精品国产97久久久久久| 国产二区在线播放| 欧美一区二区视频免费观看| 国产午夜精品无码| 国产欧美精品在线观看| www.51色.com| 中文在线一区| 亚洲午夜精品国产| 99精品国产一区二区三区2021| 欧美性视频精品| 婷婷成人激情| 亚洲国产中文字幕久久网| 免费看日批视频| 人妻无码中文字幕| 国产第一页在线观看| 国产精品久久久国产盗摄| 全部免费毛片在线播放一个| 一级毛片视频在线观看| 7777kkk亚洲综合欧美网站| 亚洲a∨精品一区二区三区导航| 好吊妞国产欧美日韩免费观看网站| 色橹橹欧美在线观看视频高清| 欧美伊人久久久久久久久影院 | 亚洲无码久久久久| 亚洲一级二级三级| 成人精品一二三区| 91麻豆6部合集magnet| 小早川怜子一区二区三区| 性欧美长视频| 国产在线视频综合| 第一sis亚洲原创| 精品人伦一区二区三区| www.久久久.com| 国产成人精品在线播放| 欧美黑人xx片| 色偷偷偷亚洲综合网另类 | 在线播放日韩欧美| 亚洲 另类 春色 国产| 91精品国产入口| 波多野结衣爱爱| 午夜伦欧美伦电影理论片| 手机av在线看| 国产精品久久久久四虎| 法国伦理少妇愉情| 国产·精品毛片| 一区二区久久精品| 日本免费在线视频不卡一不卡二| 国产精品12345| 欧美精品国产一区| 免费观看黄色的网站| 国产精品一区二区三区av麻| 精品国产综合久久| 亚洲一区二区三区在线免费 | 粉嫩虎白女毛片人体| 亚洲二区精品| 老司机激情视频| 91精品国产自产在线观看永久∴| 神马影院午夜我不卡| 国语产色综合| 蜜桃狠狠色伊人亚洲综合网站| 哺乳挤奶一区二区三区免费看| 亚洲综合精品一区二区| 亚洲人成777| 国产日韩欧美中文在线播放| 高清av一区| 国产精品久久久久不卡| 欧美日韩视频免费观看| 日本视频久久久| 成人线上视频| 国产精品91一区| 欧美舌奴丨vk视频| 国产福利视频一区二区| 性欧美18一19sex性欧美| 日韩美女激情视频| 欧美va在线观看| 国产欧美在线视频| 亚洲一区二区小说| 91色琪琪电影亚洲精品久久| 亚洲网站三级| 91福利入口| 岛国精品一区| 久久精品欧美| 精品福利久久久| 亚洲欧美成人一区| 亚洲蜜桃视频| www.国产在线视频| 国产欧美精品| 国产成人精品视频ⅴa片软件竹菊| 美女网站久久| 69久久久久久| 国产酒店精品激情| 老司机免费视频| 91麻豆精品秘密| 亚洲第一视频区| 亚洲女厕所小便bbb| xxxx 国产| 色婷婷精品久久二区二区蜜臂av| 中文天堂在线播放| 日韩欧美一区二区久久婷婷| 欧美少妇bbw| 亚洲人在线视频| 黄色小网站在线观看| 午夜精品久久久久久久男人的天堂| 免费电影日韩网站| 成人黄色中文字幕| 菁菁伊人国产精品| 亚洲国产精品久久久久久女王| 亚洲综合激情在线| 日韩av一二三四区| 久久99精品国产麻豆婷婷| 男男一级淫片免费播放| 久久精品亚洲麻豆av一区二区| 日本爱爱小视频| 婷婷久久综合九色综合伊人色| 中文字幕视频二区| 亚洲成人三级在线| 日本成人网址| 午夜精品久久久久久久99热| 另类图片综合电影| 99超碰麻豆| 欧美第十八页| 国产精品宾馆在线精品酒店| 狠狠v欧美v日韩v亚洲ⅴ| 一本加勒比波多野结衣| 18成人在线观看| 日韩精品一区二区亚洲av| 日韩一区二区三区av| 国产一级片在线播放| 欧美成人一二三| 日韩精品三区| 国产麻豆乱码精品一区二区三区 | 日韩在线观看你懂的| 成av人片在线观看www| 成人性生交大片免费看视频直播 | 性做爰过程免费播放| 免播放器亚洲| 在线看黄色的网站| 亚洲三级久久久| 中文字幕+乱码+中文乱码www| 亚洲电影中文字幕| а√天堂官网中文在线| 国产精品久久久久久久久久三级| 国产精品17p| 在线观看18视频网站| 蜜桃视频一区二区| 谁有免费的黄色网址| 精品国产乱码久久久久久天美| 国产成a人亚洲精v品无码| 自拍偷拍亚洲一区| 成人va天堂| 欧美日韩精品一区| 一本色道久久综合亚洲精品高清| 在线播放第一页| 自拍偷自拍亚洲精品播放| 一本到在线视频| 色婷婷综合成人| 99欧美精品| 日韩女优中文字幕| 视频在线在亚洲| 亚洲精品国产精品国自产网站| 欧美性xxxxxxxxx| 亚洲色偷精品一区二区三区| 高清欧美性猛交xxxx黑人猛交| 亚洲不卡视频| 亚洲精品天堂成人片av在线播放 | 国产成人在线视频免费观看| 国产精品自产拍高潮在线观看| 欧美午夜精品一区二区三区电影| chinese少妇国语对白| 久久久三级国产网站| 无码人妻丰满熟妇区五十路 | 日韩欧美在线综合网| 国精产品一区| 4444kk亚洲人成电影在线| 婷婷久久综合| 一级片黄色免费| 玉米视频成人免费看| 亚洲毛片欧洲毛片国产一品色| 欧美精品videofree1080p| 999精品视频在这里| 97成人在线免费视频| 99视频在线精品| 无码人妻精品一区二区三区不卡| 一本色道久久88亚洲综合88| 国产成人午夜性a一级毛片| 一区二区欧美日韩| 国产麻豆日韩欧美久久| 久久久夜色精品| 日韩av在线导航| 深夜成人影院| 一区二区三视频| 国产99精品视频| 国产成人无码精品亚洲| 亚洲视频在线免费看| 欧美成人毛片| 日本大胆人体视频| 99国产精品99久久久久久| 欧美特级黄色片| 久久艹在线视频| 精品国产一区二区三区成人影院 | 91成人在线网站| 美脚丝袜脚交一区二区| 91日韩精品一区| 一二区在线观看| 久久久久久久香蕉网| 国产99精品一区| 亚洲五月激情网| 欧美日韩在线免费观看| 午夜伦全在线观看| 好吊妞www.84com只有这里才有精品 | 国产深夜男女无套内射| 中文字幕乱码日本亚洲一区二区| av天堂一区二区三区| 欧美做爰性生交视频| 91久久久精品国产| 亚洲成人av免费在线观看| 精品视频一区二区不卡| 超清av在线| 亚洲一卡二卡| www.成人网.com| 91麻豆一区二区| 欧美中文在线观看| 欧美日韩免费| 久久久久麻豆v国产| 亚洲精品电影网站|