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

聊聊 MySQL 8.0 數據字典表

數據庫 MySQL
本文我們就來聊聊 MySQL 8.0 中的數據字典表。

MySQL 8.0 對數據字典進行了重構,用戶表、數據字典表、MySQL 其它系統表的元數據都統一保存到 mysql 庫的數據字典表中了。

mysql 庫中,除了 general_log、slow_log 2 個日志表,其它所有表的存儲引擎都是 InnoDB,伴隨而來的是 DDL 終于能夠支持原子操作了。

以 DROP TABLE t1, t2 為例,不會出現 t1 表刪除成功,t2 表刪除失敗的情況,而是要么都刪除成功,要么都刪除失敗。

本文我們就來聊聊 MySQL 8.0 中的數據字典表。

本文內容基于 MySQL 8.0.29 源碼。

1、概述

MySQL 8.0 重構數據字典之后,廢除了 MySQL 5.7 中用于保存元數據的磁盤文件:.frm、.par、.TRN、.TRG、.isl、db.opt、ddl_log.log。

如果想要了解上面這些磁盤文件都保存了什么元數據,可以參照 MySQL 官方文檔:https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html。

這些文件被廢除之后,原本保存到這些文件中的元數據,都保存到數據字典表中了。

數據字典表本身也大變樣了:

  • 數據字典表不再位于 InnoDB 系統表空間,而是遷移到 mysql 庫中,mysql 庫位于 mysql 表空間,磁盤文件為mysql.ibd。
  • SYS_TABLES、SYS_COLUMNS、SYS_INDEXES、SYS_FIELDS 這 4 個數據字典表也不再完全依賴硬編碼在源碼中的元數據了,而是和其它表一樣,使用保存在 mysql 庫的數據字典表中的元數據。

上面 4 個數據字典表的名字也發生了變化,后面會介紹。

2、數據字典表有哪些?

按照官方文檔的定義,MySQL 8.0 一共有 31 張數據字典表:

dd_properties
innodb_ddl_log
catalogs
character_sets
check_constraints
collations
column_statistics
column_type_elements
columns
events
foreign_key_column_usage
foreign_keys
index_column_usage
index_partitions
index_stats
indexes
parameter_type_elements
parameters
resource_groups
routines
schemata
st_spatial_reference_systems
table_partition_values
table_partitions
table_stats
tables
tablespace_files
tablespaces
triggers
view_routine_usage
view_table_usage

上面只是簡單列出了數據字典表的表名,如果想了解每個表存放了什么內容,可以參照官方文檔:https://dev.mysql.com/doc/refman/8.0/en/system-schema.html。

默認情況下,我們是看不到數據字典表的,需要滿足以下條件才能看到:

  • 源碼編譯 Debug 版本 MySQL,以使用 cmake 編譯為例,需要帶上-DCMAKE_BUILD_TYPE=Debug 編譯選項。
  • 連接 MySQL 之后,先執行下面的 SQL 告訴 MySQL 跳過數據字典表的權限檢查:
SET SESSION debug = '+d,skip_dd_table_access_check'

滿足以上 2 個條件之后,執行下面這條 SQL 就可以看到所有數據字典表了:

SELECT a.name AS db_name, b.*
FROM mysql.schemata AS a
INNER JOIN mysql.tables AS b ON a.id = b.schema_id
WHERE b.schema_id = 1 AND b.hidden = 'System'
ORDER BY b.id

執行上面的 SQL 列出來的表有 32 個,其中 innodb_dynamic_metadata 表不屬于數據字典表。

上面列出的數據字典表中,有 4 個需要重點介紹,因為不管是數據字典表本身,還是用戶表,都離不開這 4 個表:

  • tables:存儲表的元數據,包括表空間 ID、數據庫 ID、表 ID、表名、表注釋、行格式等信息,對應 MySQL 5.7 中的數據字典表 SYS_TABLES。
  • columns:存儲表中字段的元數據,包括表 ID、字段 ID、字段名、字段注釋、字段類型、是否自增等信息,對應 MySQL 5.7 中的數據字典表 SYS_COLUMNS。
  • indexes:存儲表的索引元數據,包括表空間 ID、表 ID、索引 ID、索引名、索引注釋、是否是隱藏索引等信息,對應 MySQL 5.7 中的數據字典表 SYS_INDEXES。
  • index_column_usage:存儲索引中字段的元數據,包括索引 ID、字段 ID、字段在索引中的編號(從 1 開始)、索引字段長度(如果是前綴索引字段,則是前綴的長度)、索引字段排序、是否隱藏,共 6 個字段,對應 MySQL 5.7 中的數據字典表 SYS_FIELDS。這個表中沒有包含更詳細的字段信息,如果需要,可以通過字段 ID 到 columns 表獲取。

index_column_usage 和 SYS_FIELDS 表不完全一樣,有 2 點需要說明:

  • index_column_usage 包含 6 個字段,比 SYS_FIELDS 多 3 個字段:order:表示索引字段的排序。length:hidden = 0 時,表示索引字段長度,或前綴索引字段的前綴長度;hidden = 1 時,字段值為 NULL。hidden:0 表示索引中該字段由用戶定義;1 表示索引中該字段是 MySQL 給加上的。

以下是一個測試表,圖中 name 是從 columns 表中連表查詢得到的,其它都是 index_column_usage 表的字段。

CREATE TABLE `t5` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`str1` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_general_ci NOT NULL DEFAULT '',
`i1` int NOT NULL DEFAULT '0',
`str2` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_general_ci NOT NULL DEFAULT '',
`i2` int NOT NULL DEFAULT '0',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `idx_i1` (`i1`) USING BTREE,
KEY `idx_str1` (`str1`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

圖片

index_id = 310 是主鍵索引,hidden = 0 的記錄是主鍵字段;hidden = 1 的記錄是主鍵索引中的其它字段,也就是表中的字段。index_id = 312 是二級索引,其中 str1 是前綴索引字段,前綴長度為 255 * 3(utf8 一個字符最多占用的字節數) = 765,hidden = 0 表示 str1 是用戶定義的二級索引字段;hidden = 1 的記錄是 MySQL 自己增加到二級索引中的主鍵字段。

index_column_usage 表中的ordinal_position 表示編號,從 1 開始;SYS_FIELDS 中的 POS 表示序號,從 0 開始。

除了在 Debug 版本的 MySQL 中設置跳過數據字典表的權限檢查之外,還可以通過 information_schema 數據庫中的表或視圖查看其對應的數據字典表:

數據字典表

information_schema 表或視圖

tables

INNODB_TABLES

columns

INNODB_COLUMNS

indexes

INNODB_INDEXES

index_column_usage

INNODB_FIELDS

……

……

3、數據字典表元數據在哪里?

數據字典表用于存儲用戶表的元數據,這個比較好理解,因為創建用戶表的時候,所有數據字典表都已經存在了,把用戶表的各種元數據插入到相應的數據字典表就可以了。

數據字典表本身的元數據也會保存到數據字典表里,但是某個數據字典表創建的時候,有一些數據字典表還沒有創建,這就有問題了。

我們以 columns、indexes 這 2 個數據字典表為例來說明:columns 表先于 indexes 表創建,columns 表創建成功之后,需要把索引元數據保存到 indexes 表中,而此時 indexes 表還沒有創建,columns 表的索引元數據自然也就沒辦法保存到 indexes 表中了。

MySQL 解決這個問題的方案是引入一個中間層,用于臨時存放所有數據字典表的各種元數據,等到所有數據字典表都創建完成之后,再把臨時存放在中間層的所有數據字典表的元數據保存到相應的數據字典表中。

這里所謂的中間層實際上是一個存儲適配器,源碼中對應的類名為 Storage_adapter,這是一個實現了單例模式的類。

MySQL 在初始化數據目錄的過程中,Storage_adapter 類的實例屬性 m_core_registry 就是所有數據字典表元數據的臨時存放場所。

4、創建數據字典表

我們安裝 MySQL 完成之后,想讓 MySQL 運行起來,要做的第一件事就是初始化 MySQL,實際上就是初始化 MySQL 數據目錄。

初始化過程會創建 MySQL 運行時需要的各種表空間、數據庫、表,其中就包含數據字典表。

創建數據字典表的過程分為 3 個步驟進行:

第 1 步,把代表每個數據字典表的 Object_table 對象注冊到 System_tables 類的實例屬性 m_registry 中。

除了數據字典表,m_registry 中還包含了 mysql 庫中的其它 MySQL 系統表。

第 2 步,循環 m_registry 中的所有表,通過 Object_table 得到數據字典表的 DDL,然后調用 dd::execute_query() 執行 DDL 語句創建數據字典表。

dd::execute_query() 創建數據字典表的過程中,會把表的元數據臨時存放到 Storage_adapter 類的實例屬性 m_core_registry 中,而不會保存到各種元數據對應的數據字典表中,這么做的原因在上一小節中介紹數據字典表的元數據在哪里時,已經介紹過了,這里不再贅述。

dd::execute_query() 執行完一個數據字典表的 DDL 語句之后,這個數據字典表在表空間中就已經存在了,m_registry 中的所有表都處理完成之后,所有數據字典表就都存在了。

圖片

第 3 步,循環 m_registry 中的所有表,把每個表本身的元數據(數據庫 ID、表 ID、表名、注釋、字段數量等)保存到 mysql.tables 數據字典表中,然后把表的字段、索引等元數據保存到對應的數據字典表中。

所有數據字典表的元數據都從 Storage_adapter 類的實例屬性 m_core_registry 中讀取。

圖片

經過 3 個步驟的通力協作,所有數據字典表的元數據就都保存到數據字典表中了,這個雞生蛋、蛋生雞的問題,就這樣通過引入外力(m_core_registry)解決了。

5、打開數據字典表

數據字典表保存著 MySQL 運行過程中需要的一系列關鍵數據,使用頻次很高,MySQL 啟動過程中就會把數據字典表的元數據都加載到內存中,這就是打開表的過程。

也就是說,打開數據字典表是在 MySQL 啟動過程中完成的。

前面我們介紹過,數據字典表的元數據也是保存在數據字典表中的。

MySQL 啟動過程中,要先打開數據字典表才能拿到數據字典表的元數據,而要拿到數據字典表的元數據,又必須先打開數據字典表。

這個過程很繞,不是很好理解,我們來打個比方:數據字典表是一個房間,數據字典表的元數據是打開房間門的鑰匙。

現在問題來了,因為 MySQL 把數據字典表的元數據保存在數據字典表中,這就相當于把打開房間門的鑰匙落在房間里了。

要想打開房間,必須先拿到鑰匙,而要想拿到鑰匙又必須先打開房間,這樣一轉換,問題是不是更好理解點了?

我們先來想想怎么解決房間和鑰匙問題,如果把打開房間的鑰匙落在房間里了,有哪些辦法可以解決?

我能想到的有以下 3 種解決方案:

  • 暴力破解,把鎖撬開。
  • 找專業的開鎖師傅把鎖打開。
  • 用備用鑰匙開門。這個方法最好,但是有個前提條件:已經提前準備好了備用鑰匙。

MySQL 里沒有前 2 種方案,而是留了一把備用鑰匙,也就是第 3 種方案,接下來我們看看 MySQL 打開數據字典表的過程:

第 1 步,和創建數據字典表一樣,把代表每個數據字典表的 Object_table 對象注冊到 System_tables 類的實例屬性 m_registry 中。

每個數據字典表的 Object_table 對象中,都定義了這個表的表名、字段、索引、外鍵等信息。

Object_table 對象中保存的并不是 DDL 語句,卻類似于我們建表時的 DDL 語句。

下面這個例子是源碼中表空間數據字典表 mysql.tablespaces Object_table 對象中定義的該表的信息:

Tablespaces::Tablespaces() {  
m_target_def.set_table_name("tablespaces");
m_target_def.add_field(FIELD_ID, "FIELD_ID", "id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT");
m_target_def.add_field(FIELD_NAME, "FIELD_NAME", "name VARCHAR(268) NOT NULL COLLATE " + String_type(Object_table_definition_impl::name_collation()->m_coll_name));
m_target_def.add_field(FIELD_OPTIONS, "FIELD_OPTIONS", "options MEDIUMTEXT");
m_target_def.add_field(FIELD_SE_PRIVATE_DATA, "FIELD_SE_PRIVATE_DATA", "se_private_data MEDIUMTEXT");
m_target_def.add_field(FIELD_COMMENT, "FIELD_COMMENT", "comment VARCHAR(2048) NOT NULL");
m_target_def.add_field(FIELD_ENGINE, "FIELD_ENGINE", "engine VARCHAR(64) NOT NULL COLLATE utf8_general_ci");
m_target_def.add_field(FIELD_ENGINE_ATTRIBUTE, "FIELD_ENGINE_ATTRIBUTE", "engine_attribute JSON");
m_target_def.add_index(INDEX_PK_ID, "INDEX_PK_ID", "PRIMARY KEY(id)");
m_target_def.add_index(INDEX_UK_NAME, "INDEX_UK_NAME", "UNIQUE KEY(name)");
}

第 2 步,循環 m_registry 中的所有表,通過 Object_table 得到數據字典表的 DDL,然后調用 dd::execute_query() 執行 DDL 語句創建數據字典表。

和創建數據字典表中的第 2 步不一樣,dd::execute_query() 執行 DDL,并不會真正的創建表,只是為了生成數據字典表元數據,并把元數據保存到 Storage_adapter 類的實例屬性 m_core_registry 中。

保存到 m_core_registry 中的數據字典表元數據,就是我們前面說的備用鑰匙,有了這把備用鑰匙,就能打開數據字典表了。

圖片

第 3 步,循環 m_registry 中的所有表,通過第 2 步生成的數據字典表元數據,去 mysql 表空間中(表空間文件:mysql.ibd)讀取各個數據字典表的元數據。

這一步執行完成之后,所有數據字典表的元數據都被加載到內存中了,數據字典表都被打開了。

第 4 步,循環 m_registry 中的所有表,把數據字典表的元數據從 m_core_registry 刪除。

第 5 步,循環 m_registry 中所有的表,把從表空間中讀取出來的數據字典表的元數據存入 m_core_registry 中。

不過,這一步存入 m_core_registry 的并不是所有數據字典表的元數據,而是 22 個核心(CORE)數據字典表的元數據:

catalogs
character_sets
check_constraints
collations
column_statistics
column_type_elements
columns
foreign_key_column_usage
foreign_keys
index_column_usage
index_partitions
indexes
resource_groups
schemata
table_partition_values
table_partitions
tables
tablespace_files
tablespaces
triggers
view_routine_usage
view_table_usage

1 ~ 5 步執行完成之后,m_core_registry 中就只包含上面 22 個核心數據字典表的元數據了,有了這些表的元數據,就可以打開其它所有表了。

第 6 步,調用 dd::execute_query() 執行 FLUSH TABLES 關閉已經打開的所有數據字典表、非數據字典表,后續就可以用從數據字典表中讀取出來的元數據來打開數據字典表和其它所有需要的表了。

到這里,打開數據字典表的大體流程就已經介紹完了,也許大家會有疑問:

第 2 步調用 dd::execute_query() 執行 DDL,已經拿到了數據字典表的元數據。

為了區分,把這里拿到的元數據叫作備用元數據。

第 3 步根據備用元數據打開數據字典表,從表空間中讀取到數據字典表的元數據。

同樣為了區分,把這里拿到的元數據叫作原配元數據。

第 4 步從 m_core_registry 中刪除備用元數據。第 5 步把原配元數據存入 m_core_registry。

數據字典表的備用元數據和原配元數據不是一樣的嗎?為什么還要用原配元數據替換備用元數據,這是不是多此一舉?

我沒有逐個對比備用元數據和原配元數據是否完全一樣,這是個不小的工程。不過,既然源碼中這么實現,那應該是有它的原因,只是我還沒有發現。如果后面發現其中的原因,我會再補充到我的博客中。

6、總結

要理解 MySQL 8.0 中的數據字典表,核心是理解以下 2 點:

  • 初始化數據目錄時,數據字典表的元數據是怎么存放到數據字典表中的?這主要是借助了 Storage_adapter 類實例的 m_core_registry 屬性。在創建數據字典表的過程中,先創建每個數據字典表,并把元數據臨時存放到 m_core_registry 中,所有數據字典表都創建成功之后,最后再一次性把所有數據字典表的元數據保存到對應的數據字典表中。
  • MySQL 啟動時,怎么用數據字典表的元數據打開數據字典表?這同時借助了硬編碼在源碼中的數據字典表定義,以及 Storage_adapter 類實例的 m_core_registry? 屬性。

MySQL 啟動過程中,先通過 Object_table 得到創建數據字典表的 DDL,調用 dd::execute_query() 執行 DDL,拿到元數據(備用原數據),把備用元數據臨時存放到 m_core_registry 屬性中,再通過備用元數據打開數據字典表。

本文轉載自微信公眾號「一樹一溪」,可以通過以下二維碼關注。轉載本文請聯系一樹一溪公眾號。

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

2023-03-04 20:50:19

MySQL字典InnoDB

2010-11-15 16:08:15

ORACLE系統表

2015-07-22 17:21:34

Oracle數據字典

2018-03-16 15:30:45

數據庫MySQL數據字典

2021-06-03 19:13:06

MySQLJson數據

2010-04-28 17:49:41

Oracle數據字典

2010-04-09 10:13:13

Oracle數據字典

2010-04-06 17:17:16

Oracle數據字典

2010-03-31 16:38:02

Oracle數據字典

2023-05-03 09:18:24

RedisDB數據字典Dict

2010-04-22 09:36:56

Oracle數據字典

2010-07-14 13:50:48

SQL Server數

2010-05-10 15:22:34

Oracle數據字典

2010-04-27 16:18:26

Oracle數據字典

2024-07-26 10:50:51

SpringScrew數據庫

2022-06-05 23:31:28

ClionMySQL數據

2010-04-14 14:09:38

Oracle管理腳本

2012-02-02 13:45:28

JavaJSP

2023-03-06 07:48:01

數據字典Spring

2018-01-19 09:38:28

數據庫Oracle數據字典
點贊
收藏

51CTO技術棧公眾號

99久久99久久久精品齐齐| 免费视频亚洲| 亚洲 欧美综合在线网络| 国产免费一区二区| 国产情侣小视频| 亚欧美无遮挡hd高清在线视频| 欧美变态口味重另类| 1024精品视频| 91蜜桃在线视频| 国产午夜久久久久| 亚洲综合精品伊人久久| 黄色在线视频网址| 91精品推荐| 亚洲天堂男人的天堂| 成年人性生活视频| 日本一区免费网站| 亚洲国产wwwccc36天堂| 亚洲欧美日产图| 天天操天天射天天| 精品一区二区三区视频| 日韩暖暖在线视频| 精品午夜福利在线观看| 日韩欧美三级| 国产视频亚洲精品| 成人三级做爰av| 国产精品伊人| 在线视频欧美精品| 日韩av综合在线观看| 在线看三级电影| 国产精品久久久久国产精品日日| 精品一区二区三区自拍图片区| 国产精品久久影视| 免费看日韩精品| 欧美亚洲第一区| 亚欧洲精品在线视频| 重囗味另类老妇506070| 中文字幕av一区二区| 人人妻人人澡人人爽人人精品| 视频在线观看免费影院欧美meiju| 欧洲另类一二三四区| 六月丁香婷婷激情| 日本免费一区二区六区| 亚洲国产精品一区二区www在线| 亚洲欧洲一区二区| bbbbbbbbbbb在线视频| 久久久亚洲精品一区二区三区 | 国产午夜精品视频免费不卡69堂| 中文字幕乱视频| 一区二区三区亚洲变态调教大结局| 欧美日韩国产美| 高清一区在线观看| 快播电影网址老女人久久| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 五月天婷婷社区| 99视频精品全部免费在线| 国产一区二区久久久| 人妻91麻豆一区二区三区| 成人在线一区二区三区| 国产精品乱子乱xxxx| 国产 日韩 欧美 精品| 岛国精品在线观看| 国产伦精品一区二区| 天天插天天干天天操| 久久蜜桃一区二区| 日韩欧美一区二区在线观看| 国产高清一区在线观看| 国产精品色噜噜| 一区二区精品在线观看| 黄色成年人视频在线观看| 亚洲欧美日韩国产中文在线| 久久久99精品视频| 欧美巨大xxxx做受沙滩| 婷婷成人激情在线网| 91精品91久久久中77777老牛| 日韩欧美另类一区二区| 欧美日韩aaaaaa| 91亚洲一线产区二线产区| 久久av国产紧身裤| 亚洲精品自拍视频| 国产成人无码精品久久二区三| 日韩高清欧美| 欧美国产日产韩国视频| 中文字幕精品三级久久久| 热久久免费视频| 91在线精品播放| 日批视频在线播放| 中文字幕免费观看一区| 椎名由奈jux491在线播放| 黄页网站在线观看免费| 一本久道久久综合中文字幕| 日本人69视频| 日本午夜精品| www.久久久久久.com| 久视频在线观看| 久久久久网站| 亚洲一区二区三区成人在线视频精品| 秋霞网一区二区| 中文字幕不卡的av| 给我免费播放片在线观看| 国产精品美女午夜爽爽| 精品不卡在线视频| 日本一卡二卡在线播放| 亚洲国内欧美| 国产在线日韩在线| 日韩欧美在线番号| 亚洲精选免费视频| 国产一级不卡毛片| 精品精品国产毛片在线看| 中文字幕亚洲欧美日韩在线不卡| 久久久久免费看| 麻豆成人av在线| 精品免费视频123区| 黄色网页在线免费看| 一本到不卡免费一区二区| 色欲无码人妻久久精品| 欧美日韩国产高清电影| 2019中文在线观看| 丰满人妻一区二区三区免费| 国产精品美女久久久久久久网站| 日本韩国欧美在线观看| 国产美女亚洲精品7777| 这里只有精品丝袜| 国产又黄又猛又粗又爽| 成人免费视频caoporn| 中国成人亚色综合网站| 免费观看成人性生生活片 | 欧美色一级片| 成人在线视频网| 番号集在线观看| 欧美午夜精品久久久久久人妖| 9191在线视频| 久久久久久久久丰满| 国产精品色悠悠| 国产午夜精品一区理论片| 精品久久久久久| 亚洲天堂av网站| 欧美午夜精品| 国产精品免费一区二区三区| 少女频道在线观看免费播放电视剧| 欧美挠脚心视频网站| 91在线播放视频| 国产精品亚洲二区在线观看| 国产精一区二区| 久久这里有精品视频| 国产精品高潮呻吟AV无码| 中文字幕欧美日本乱码一线二线 | 678在线观看视频| 欧美xxx久久| 国产一级特黄a高潮片| 国产福利一区二区三区视频在线 | 91九色美女在线视频| 日韩欧美成人激情| 国产小视频在线看| 粉嫩av亚洲一区二区图片| 999一区二区三区| 国产乱论精品| 国产91精品久久久| 国产免费av高清在线| 在线观看亚洲精品| 91导航在线观看| 极品少妇xxxx精品少妇| 蜜臀av.com| 视频亚洲一区二区| 91精品国产成人| 九一国产在线| 777奇米成人网| 久久97人妻无码一区二区三区| 丁香一区二区三区| 国内外成人激情视频| 精品国产一区二区三区四区| 国产精品免费观看在线| 国产福利在线播放麻豆| 日韩精品专区在线| 天天操中文字幕| 亚洲国产精品av| 亚洲熟女乱综合一区二区| 在线观看视频免费一区二区三区| 欧美日韩一区在线播放| 另类一区二区| 国外成人在线播放| 丁香婷婷在线| 日韩欧美一级在线播放| 日本天堂网在线| 国产精品热久久久久夜色精品三区| 91大神免费观看| 国产精品女主播一区二区三区| 日韩欧美三级电影| 电影91久久久| 朝桐光一区二区| 亚洲香蕉成人av网站在线观看 | 免费国产自久久久久三四区久久| 伊人www22综合色| 中文字幕在线日韩| 精品国产亚洲av麻豆| 一本到一区二区三区| 国产探花在线免费观看| 91蜜桃在线免费视频| 99九九99九九九99九他书对| 亚洲日本国产| 97超碰免费观看| 亚洲日产av中文字幕| 亚洲一区二区三区乱码aⅴ| av日韩亚洲| 欧美激情免费在线| av网站在线免费观看| 精品国产伦一区二区三区观看方式 | 水莓100国产免费av在线播放| 欧美日韩一区二区在线视频| 亚洲一区 视频| 亚洲蜜臀av乱码久久精品| 色偷偷偷亚洲综合网另类| 国产精品成人一区二区三区电影毛片| 国产综合久久久久久鬼色| 久久精品99国产| 黄色成人91| 国产在线拍揄自揄拍无码| 国产伦一区二区三区| 国产一区不卡在线观看| 国产精品一级在线观看| 国产精品私拍pans大尺度在线 | 95视频在线观看| 激情五月婷婷综合| 日本成人中文字幕在线| 模特精品在线| av免费观看网| 亚洲精品1区| 欧美精品在欧美一区二区| 日韩欧美视频在线播放| 午夜久久资源| 激情综合网五月| 欧美成人第一区| 日韩av资源网| 国产精品久久国产精品| 精品国产不卡一区二区| 91精品一区二区| 亚洲伦理网站| 91久久精品国产91久久| 日本电影久久久| 国产日韩欧美在线看| 国产情侣一区二区三区| 国产精品久久久久秋霞鲁丝| 欧美在线va视频| 国产精品免费观看在线| 国产欧美自拍| 91久久久久久久久久| 97久久精品一区二区三区的观看方式 | 亚洲在线资源| 成人午夜小视频| 国产精品久一| 动漫3d精品一区二区三区| 澳门成人av| 国模精品一区二区三区| 精品视频自拍| 蜜桃麻豆91| 欧美精品一区二区三区精品| 色噜噜色狠狠狠狠狠综合色一| 成人羞羞网站入口| 伊人色综合影院| 欧美 日韩 国产 一区| 9191国产视频| 亚洲美女黄网| 成人黄色片视频| 奇米影视一区二区三区小说| 亚洲天堂网2018| 国产精品影音先锋| 久久久久久婷婷| 久久久久9999亚洲精品| 999久久久国产| 洋洋成人永久网站入口| 91午夜视频在线观看| 在线免费观看成人短视频| 91超薄丝袜肉丝一区二区| 日韩午夜av电影| 丰满少妇在线观看bd| 亚洲精品在线视频| 日本高清中文字幕在线| 欧美激情网友自拍| 日韩av中字| 亚洲r级在线观看| 色婷婷综合久久久久久| 四虎影视永久免费在线观看一区二区三区| 久久一区二区中文字幕| 精品无码国产一区二区三区av| 日韩精品视频网| 人妻体体内射精一区二区| 91最新地址在线播放| 国产极品视频在线观看| 亚洲国产精品一区二区www| 国产天堂第一区| 精品欧美乱码久久久久久| 精彩国产在线| 九九热这里只有精品免费看| 原纱央莉成人av片| 亚洲影院高清在线| 少妇精品久久久一区二区| 国产又粗又长又爽视频| 日韩专区欧美专区| 欧洲熟妇的性久久久久久| 中国av一区二区三区| 免费观看一级视频| 欧美男生操女生| 国产区av在线| 国内久久久精品| 不卡一区视频| 先锋影音欧美| 亚洲欧美日韩国产一区二区| 色哟哟在线观看视频| 中文字幕国产一区| 狠狠躁夜夜躁人人爽天天高潮| 欧美精品xxxxbbbb| 国产一区二区三区不卡在线| 久久久久久久成人| 国产欧美在线观看免费| 免费在线一区二区| 亚洲福利精品| 日本55丰满熟妇厨房伦| 亚洲国产经典视频| 伊人久久久久久久久久久久 | 人妻一区二区视频| 精品成人乱色一区二区| 国产三级第一页| 日韩中文字幕国产| 亚洲不卡系列| 欧美三级网色| 国产精品久久久久9999高清| 大尺度在线观看| 一区二区三区在线观看动漫| 怡红院男人天堂| 亚洲最新av在线网站| 345成人影院| 久久偷窥视频| 亚洲深夜影院| 极品人妻一区二区三区| 欧美日韩加勒比精品一区| 乱色精品无码一区二区国产盗| 久久视频在线视频| 国产成人免费视频网站视频社区| 久久丁香综合五月国产三级网站 | 26uuu国产一区二区三区 | 色哟哟国产精品| 午夜视频免费看| 91极品视频在线| 日本一道高清一区二区三区| 久久久999视频| 2014亚洲片线观看视频免费| 亚洲另类欧美日韩| 亚洲激情视频在线| xxxxxx欧美| 日本一区二区视频| 蜜臀av一区二区在线免费观看| 国产又粗又长免费视频| 欧美日韩黄视频| 国产精品久久麻豆| 91蜜桃网站免费观看| 亚洲无吗在线| 男人天堂av电影| 欧美日韩国产一区| 久久99精品久久久久久野外| 91九色露脸| 国产亚洲毛片在线| wwwwxxxx国产| 欧美日韩免费不卡视频一区二区三区| 麻豆av在线导航| 成人国产一区二区| 亚洲主播在线| 日韩福利在线视频| 91麻豆精品国产91久久久资源速度| a视频在线播放| 国产伦理久久久| 久久影院亚洲| 免费成人深夜夜行网站| 精品区一区二区| 中文字幕在线视频久| 亚洲欧美日韩在线综合 | 亚洲综合日本| 日本黄色小视频在线观看| 欧美一二区视频| 欧产日产国产精品视频| 一区二区日本伦理| 不卡影院免费观看| 欧美性受xxx黑人xyx性爽| 久久影视电视剧免费网站清宫辞电视| 东京久久高清| 九热视频在线观看| 亚洲一区影音先锋| 国产高清在线观看| av激情久久| 蜜臀精品一区二区三区在线观看| 欧美丰满艳妇bbwbbw| 亚洲欧美日韩网| 亚洲欧美日本国产| 成人性做爰aaa片免费看不忠| 亚洲精品久久久久久国产精华液| 香蕉久久国产av一区二区| 国产免费亚洲高清| 99国产精品| 手机在线免费看毛片| 国产亚洲精品久久久优势| 亚洲天堂中文字幕在线观看| caoporn超碰97|