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

同事問我MySQL怎么遞歸查詢,我懵逼了...

數(shù)據(jù)庫 MySQL
最近在做的業(yè)務場景涉及到了數(shù)據(jù)庫的遞歸查詢。我們公司用的 Oracle ,眾所周知,Oracle 自帶有遞歸查詢的功能,所以實現(xiàn)起來特別簡單。

前言

最近在做的業(yè)務場景涉及到了數(shù)據(jù)庫的遞歸查詢。我們公司用的 Oracle ,眾所周知,Oracle 自帶有遞歸查詢的功能,所以實現(xiàn)起來特別簡單。

但是,我記得 MySQL 是沒有遞歸查詢功能的,那 MySQL 中應該怎么實現(xiàn)呢?

于是,就有了這篇文章。

文章主要知識點:

  • Oracle 遞歸查詢, start with connect by prior 用法
  • find_in_set 函數(shù)
  • concat,concat_ws,group_concat 函數(shù)
  • MySQL 自定義函數(shù)
  • 手動實現(xiàn) MySQL 遞歸查詢

Oracle 遞歸查詢

在 Oracle 中是通過 start with connect by prior 語法來實現(xiàn)遞歸查詢的。

按照 prior 關鍵字在子節(jié)點端還是父節(jié)點端,以及是否包含當前查詢的節(jié)點,共分為四種情況。

prior 在子節(jié)點端(向下遞歸)

第一種情況:start with 子節(jié)點id = ' 查詢節(jié)點 ' connect by prior 子節(jié)點id = 父節(jié)點id

  1. select * from dept start with id='1001' connet by prior id=pid; 

這里,按照條件 id='1001' 對當前節(jié)點以及它的子節(jié)點遞歸查詢。查詢結(jié)果包含自己及所有子節(jié)點。

 

 


 

 

第二種情況:start with 父節(jié)點id= ' 查詢節(jié)點 ' connect by prior 子節(jié)點id = 父節(jié)點 id

  1. select * from dept start with pid='1001' connect by prior id=pid; 

這里,按照條件 pid='1001' 對當前節(jié)點的所有子節(jié)點遞歸查詢。查詢結(jié)果只包含它的所有子節(jié)點,不包含自己。

 

其實想一想也對,因為開始條件是以父節(jié)點為根節(jié)點,且向下遞歸,自然不包含當前節(jié)點。

prior 在父節(jié)點端(向上遞歸)

第三種情況:start with 子節(jié)點id= ' 查詢節(jié)點 ' connect by prior 父節(jié)點id = 子節(jié)點id

  1. select * from dept start with id='1001' connect by prior pid=id;

這里按照條件 id='1001' ,對當前節(jié)點及其父節(jié)點遞歸查詢。查詢結(jié)果包括自己及其所有父節(jié)點。

 

第四種情況:start with 父節(jié)點id= ' 查詢節(jié)點 ' connect by prior 父節(jié)點id = 子節(jié)點id

  1. select * from dept start with pid='1001' connect by prior pid=id; 

這里按照條件 pid='1001',對當前節(jié)點的第一代子節(jié)點以及它的父節(jié)點遞歸查詢。查詢結(jié)果包括自己的第一代子節(jié)點以及所有父節(jié)點。(包括自己)

 

其實這種情況也好理解,因為查詢開始條件是以 父節(jié)點為根節(jié)點,且向上遞歸,自然需要把當前父節(jié)點的第一層子節(jié)點包括在內(nèi)。

以上四種情況初看可能會讓人迷惑,容易記混亂,其實不然。

我們只需要記住 prior 的位置在子節(jié)點端,就向下遞歸,在父節(jié)點端就向上遞歸。

  • 開始條件若是子節(jié)點的話,自然包括它本身的節(jié)點。
  • 開始條件若是父節(jié)點的話,則向下遞歸時,自然不包括當前節(jié)點。而向上遞歸,需要包括當前節(jié)點及其第一代子節(jié)點。

MySQL 遞歸查詢

可以看到,Oracle 實現(xiàn)遞歸查詢非常的方便。但是,在 MySQL 中并沒有幫我們處理,因此需要我們自己手動實現(xiàn)遞歸查詢。

為了方便,我們創(chuàng)建一個部門表,并插入幾條可以形成遞歸關系的數(shù)據(jù)。

  1. DROP TABLE IF EXISTS `dept`; 
  2. CREATE TABLE `dept`  ( 
  3.   `id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
  4.   `namevarchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL
  5.   `pid` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL
  6.   PRIMARY KEY (`id`) USING BTREE 
  7. ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic
  8.  
  9. INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1000''總公司'NULL); 
  10. INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1001''北京分公司''1000'); 
  11. INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1002''上海分公司''1000'); 
  12. INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1003''北京研發(fā)部''1001'); 
  13. INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1004''北京財務部''1001'); 
  14. INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1005''北京市場部''1001'); 
  15. INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1006''北京研發(fā)一部''1003'); 
  16. INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1007''北京研發(fā)二部''1003'); 
  17. INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1008''北京研發(fā)一部一小組''1006'); 
  18. INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1009''北京研發(fā)一部二小組''1006'); 
  19. INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1010''北京研發(fā)二部一小組''1007'); 
  20. INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1011''北京研發(fā)二部二小組''1007'); 
  21. INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1012''北京市場一部''1005'); 
  22. INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1013''上海研發(fā)部''1002'); 
  23. INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1014''上海研發(fā)一部''1013'); 
  24. INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1015''上海研發(fā)二部''1013'); 

沒錯,剛才 Oracle 遞歸,就是用的這張表。

圖1

 

另外,在這之前,我們需要復習一下幾個 MYSQL中的函數(shù),后續(xù)會用到。

find_in_set 函數(shù)

函數(shù)語法:find_in_set(str,strlist)

str 代表要查詢的字符串 , strlist 是一個以逗號分隔的字符串,如 ('a,b,c')。

此函數(shù)用于查找 str 字符串在字符串 strlist 中的位置,返回結(jié)果為 1 ~ n 。若沒有找到,則返回0。

舉個栗子:

  1. select FIND_IN_SET('b','a,b,c,d'); 

結(jié)果返回 2 。因為 b 所在位置為第二個子串位置。

 

此外,在對表數(shù)據(jù)進行查詢時,它還有一種用法,如下:

  1. select * from dept where FIND_IN_SET(id,'1000,1001,1002'); 

結(jié)果返回所有 id 在 strlist 中的記錄,即 id = '1000' ,id = '1001' ,id = '1002' 三條記錄。

 

看到這,對于我們要解決的遞歸查詢,不知道你有什么啟發(fā)沒。

以向下遞歸查詢所有子節(jié)點為例。我想,是不是可以找到一個包含當前節(jié)點和所有子節(jié)點的以逗號拼接的字符串 strlist,傳進 find_in_set 函數(shù)。就可以查詢出所有需要的遞歸數(shù)據(jù)了。

那么,現(xiàn)在問題就轉(zhuǎn)化為怎樣構(gòu)造這樣的一個字符串 strlist 。

這就需要用到以下字符串拼接函數(shù)了。

concat,concat_ws,group_concat

函數(shù)一、字符串拼接函數(shù)中,最基本的就是 concat 了。它用于連接N個字符串,如,

  1. select CONCAT('M','Y','S','Q','L'from dual;  

結(jié)果為 'MYSQL' 字符串。

 

二、concat 是以逗號為默認的分隔符,而 concat_ws 則可以指定分隔符,第一個參數(shù)傳入分隔符,如以下劃線分隔。

 

三、group_concat 函數(shù)更強大,可以分組的同時,把字段以特定分隔符拼接成字符串。

用法:group_concat( [distinct] 要連接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )

可以看到有可選參數(shù),可以對將要拼接的字段值去重,也可以排序,指定分隔符。若沒有指定,默認以逗號分隔。

對于 dept 表,我們可以把表中的所有 id 以逗號拼接。(這里沒有用到 group by 分組字段,則可以認為只有一組)

 

MySQL 自定義函數(shù),實現(xiàn)遞歸查詢

可以發(fā)現(xiàn)以上已經(jīng)把字符串拼接的問題也解決了。那么,問題就變成怎樣構(gòu)造有遞歸關系的字符串了。

我們可以自定義一個函數(shù),通過傳入根節(jié)點id,找到它的所有子節(jié)點。

以向下遞歸為例。 (講解自定義函數(shù)寫法的同時,講解遞歸邏輯)

  1. delimiter $$  
  2. drop function if exists get_child_list$$  
  3. create function get_child_list(in_id varchar(10)) returns varchar(1000)  
  4. begin  
  5.  declare ids varchar(1000) default '';  
  6.  declare tempids varchar(1000);  
  7.   
  8.  set tempids = in_id;  
  9.  while tempids is not null do  
  10.   set ids = CONCAT_WS(',',ids,tempids);  
  11.   select GROUP_CONCAT(id) into tempids from dept where FIND_IN_SET(pid,tempids)>0;   
  12.  end while;  
  13.  return ids;  
  14. end   
  15. $$  
  16. delimiter ;  

(1) delimiter $$ ,用于定義結(jié)束符。我們知道 MySQL 默認的結(jié)束符為分號,表明指令結(jié)束并執(zhí)行。但是在函數(shù)體中,有時我們希望遇到分號不結(jié)束,因此需要暫時把結(jié)束符改為一個隨意的其他值。我這里設置為 $$,意思是遇到 $$ 才結(jié)束,并執(zhí)行當前語句。

(2)drop function if exists get_child_list$$ 。若函數(shù) get_child_list 已經(jīng)存在了,則先刪除它。注意這里需要用 當前自定義的結(jié)束符 $$ 來結(jié)束并執(zhí)行語句。因為,這里需要數(shù)和下邊的函體單獨區(qū)分開來執(zhí)行。

(3)create function get_child_list 創(chuàng)建函數(shù)。并且參數(shù)傳入一個根節(jié)點的子節(jié)點id,需要注意一定要注明參數(shù)的類型和長度,如這里是 varchar(10)。returns varchar(1000) 用來定義返回值參數(shù)類型。

(4)begin 和 end 中間包圍的就是函數(shù)體。用來寫具體的邏輯。

(5)declare 用來聲明變量,并且可以用 default 設置默認值。

這里定義的 ids 即作為整個函數(shù)的返回值,是用來拼接成最終我們需要的以逗號分隔的遞歸串的。

而 tempids 是為了記錄下邊 while 循環(huán)中臨時生成的所有子節(jié)點以逗號拼接成的字符串。

(6) set 用來給變量賦值。此處把傳進來的根節(jié)點賦值給 tempids 。

(7) while do ... end while; 循環(huán)語句,循環(huán)邏輯包含在內(nèi)。注意,end while 末尾需要加上分號。

循環(huán)體內(nèi),先用 CONCAT_WS 函數(shù)把最終結(jié)果 ids 和 臨時生成的 tempids 用逗號拼接起來。

然后以 FIND_IN_SET(pid,tempids)>0 為條件,遍歷在 tempids 中的所有 pid ,尋找以此為父節(jié)點的所有子節(jié)點 id ,并且通過 GROUP_CONCAT(id) into tempids 把這些子節(jié)點 id 都用逗號拼接起來,并覆蓋更新 tempids 。

等下次循環(huán)進來時,就會再次拼接 ids ,并再次查找所有子節(jié)點的所有子節(jié)點。循環(huán)往復,一層一層的向下遞歸遍歷子節(jié)點。直到判斷 tempids 為空,說明所有子節(jié)點都已經(jīng)遍歷完了,就結(jié)束整個循環(huán)。

這里,用 '1000' 來舉例,即是:(參看圖1的表數(shù)據(jù)關系)

  1. 第一次循環(huán): 
  2.   tempids=1000 ids=1000 tempids=1001,1002 (1000的所有子節(jié)點) 
  3. 第二次循環(huán): 
  4.   tempids=1001,1002  ids=1000,1001,1002  tempids=1003,1004,1005,1013 (1001和1002的所有子節(jié)點) 
  5. 第三次循環(huán): 
  6.   tempids=1003,1004,1005,1013  
  7.   ids=1000,1001,1002,1003,1004,1005,1013  
  8.   tempids=1003和1004和1005及1013的所有子節(jié)點 
  9. ... 
  10. 最后一次循環(huán),因找不到子節(jié)點,tempids=null,就結(jié)束循環(huán)。 

(8)return ids; 用于把 ids 作為函數(shù)返回值返回。

(9)函數(shù)體結(jié)束以后,記得用結(jié)束符 $$ 來結(jié)束整個邏輯,并執(zhí)行。

(10)最后別忘了,把結(jié)束符重新設置為默認的結(jié)束符分號 。

自定義函數(shù)做好之后,我們就可以用它來遞歸查詢我們需要的數(shù)據(jù)了。如,我查詢北京研發(fā)部的所有子節(jié)點。

 

以上是向下遞歸查詢所有子節(jié)點的,并且包括了當前節(jié)點,也可以修改邏輯為不包含當前節(jié)點,我就不演示了。

手動實現(xiàn)遞歸查詢(向上遞歸)

相對于向下遞歸來說,向上遞歸比較簡單。

因為向下遞歸時,每一層遞歸一個父節(jié)點都對應多個子節(jié)點。

而向上遞歸時,每一層遞歸一個子節(jié)點只對應一個父節(jié)點,關系比較單一。

同樣的,我們可以定義一個函數(shù) get_parent_list 來獲取根節(jié)點的所有父節(jié)點。

  1. delimiter $$  
  2. drop function if exists get_parent_list$$  
  3. create function get_parent_list(in_id varchar(10)) returns varchar(1000)  
  4. begin  
  5.  declare ids varchar(1000);  
  6.  declare tempid varchar(10);  
  7.    
  8.  set tempid = in_id;  
  9.  while tempid is not null do  
  10.   set ids = CONCAT_WS(',',ids,tempid);  
  11.   select pid into tempid from dept where id=tempid;  
  12.  end while;  
  13.  return ids;  
  14. end  
  15. $$  
  16. delimiter ;  

查找北京研發(fā)二部一小組,以及它的遞歸父節(jié)點,如下:

 

注意事項

我們用到了 group_concat 函數(shù)來拼接字符串。但是,需要注意它是有長度限制的,默認為 1024 字節(jié)。可以通過 show variables like "group_concat_max_len"; 來查看。

注意,單位是字節(jié),不是字符。在 MySQL 中,單個字母占1個字節(jié),而我們平時用的 utf-8下,一個漢字占3個字節(jié)。

這個對于遞歸查詢還是非常致命的。因為一般遞歸的話,關系層級都比較深,很有可能超過最大長度。(盡管一般拼接的都是數(shù)字字符串,即單字節(jié))

所以,我們有兩種方法解決這個問題:

修改 MySQL 配置文件 my.cnf ,增加 group_concat_max_len = 102400 #你要的最大長度 。

執(zhí)行以下任意一個語句。SET GLOBAL group_concat_max_len=102400; 或者 SET SESSION group_concat_max_len=102400;

他們的區(qū)別在于,global是全局的,任意打開一個新的會話都會生效,但是注意,已經(jīng)打開的當前會話并不會生效。而 session 是只會在當前會話生效,其他會話不生效。

共同點是,它們都會在 MySQL 重啟之后失效,以配置文件中的配置為準。所以,建議直接修改配置文件。102400 的長度一般也夠用了。假設一個id的長度為10個字節(jié),也能拼上一萬個id了。

除此之外,使用 group_concat 函數(shù)還有一個限制,就是不能同時使用 limit 。如,

 

 

本來只想查5條數(shù)據(jù)來拼接,現(xiàn)在不生效了。

不過,如果需要的話,可以通過子查詢來實現(xiàn),

本文轉(zhuǎn)載自微信公眾號「 煙雨星空」,可以通過以下二維碼關注。轉(zhuǎn)載本文請聯(lián)系 煙雨星空公眾號。

 

責任編輯:武曉燕 來源: 煙雨星空
相關推薦

2022-10-17 00:04:30

索引SQL訂單

2022-03-02 15:59:37

HarmonyOS操作系統(tǒng)鴻蒙

2022-02-17 08:54:44

Service開發(fā)Mybatis

2022-04-10 18:10:24

CURD鏈表

2024-01-12 16:20:04

2021-04-06 06:23:18

MVCC并發(fā)事務

2019-05-23 09:30:22

網(wǎng)絡框架數(shù)據(jù)

2022-01-07 13:36:00

MySQL數(shù)據(jù)庫分頁

2023-01-26 02:16:17

2020-12-23 09:04:56

開發(fā)雙引號數(shù)據(jù)

2021-06-28 07:13:35

SQL語句索引

2021-12-02 08:19:06

MVCC面試數(shù)據(jù)庫

2019-08-28 14:25:00

線程安全容器

2022-03-23 08:01:04

Python語言代碼

2025-11-17 01:45:00

2025-05-26 04:21:00

2024-04-09 08:07:00

遞歸查詢MySQL數(shù)據(jù)庫

2023-12-11 08:21:02

數(shù)據(jù)的可靠性一致性Kafka

2010-04-02 15:04:14

Oracle遞歸查詢

2020-04-07 08:00:02

Redis緩存數(shù)據(jù)
點贊
收藏

51CTO技術棧公眾號

久久aⅴ国产紧身牛仔裤| 91成人小视频| 久久精品日韩一区二区三区| 国产精品激情av电影在线观看| 肉色超薄丝袜脚交69xx图片| 91在线一区| 色综合久久中文综合久久97| 亚洲在线不卡| 午夜性色福利影院| 久久精品二区亚洲w码| 欧美激情视频在线观看| 一级片视频免费看| youjizz亚洲| 欧美日韩在线观看一区二区| 欧美成人精品免费| 日韩av中文| 91免费小视频| 亚洲一区二区中文字幕| 国产三级精品三级在线观看| 一区二区三区四区日韩| 亚洲欧美日韩另类| 成人欧美精品一区二区| 国产精品蜜月aⅴ在线| 性做久久久久久久免费看| 在线一区高清| 国产二区在线播放| 91网站在线播放| 91精品天堂| 中文字幕在线观看精品| 亚洲免费在线| 国精产品一区一区三区有限在线| www中文在线| 精品99在线| 日韩成人av在线| 蜜桃视频无码区在线观看| 国产精品亚洲成在人线| 欧美午夜视频在线观看| 妞干网视频在线观看| 免费a级在线播放| 欧美激情在线看| 欧美主播一区二区三区美女 久久精品人 | 国产免费高清av| 日韩主播视频在线| 日本一欧美一欧美一亚洲视频| 动漫精品一区一码二码三码四码| 一区二区三区四区日韩| 日韩有码在线视频| 中文字幕第69页| 成人免费在线观看av| 亚洲女人天堂网| 精品久久久久久中文字幕人妻最新| jizz性欧美2| 亚洲成av人乱码色午夜| 国产国语老龄妇女a片| 最新精品在线| 精品国产网站在线观看| 亚洲一区二区三区黄色| 亚洲成av人片在线观看www| 日韩午夜av一区| 美女被艹视频网站| 亚洲精品一区二区三区在线| 欧美一区二区三区在线| 潘金莲一级淫片aaaaa| 亚洲综合影院| 亚洲第一色在线| 人妻在线日韩免费视频| 国产精品一区2区3区| 国产亚洲精品美女| 日韩在线视频免费看| 91精品综合| 久久久噜噜噜久久久| 欧美一区二区激情视频| 天堂蜜桃91精品| 国产精自产拍久久久久久| 国产又粗又黄又爽的视频| 国产一区 二区 三区一级| 肥熟一91porny丨九色丨| 免费看黄色一级视频| 91丝袜美腿高跟国产极品老师 | 日韩av免费看| 亚洲性在线观看| 国产成人在线视频网址| 久久国产精品-国产精品| 国产毛片av在线| 综合av第一页| 青青艹视频在线| 在线一区视频观看| 欧美一区二区啪啪| 中文字幕在线视频播放| 欧美精品一区二区三区中文字幕 | 欧美大片黄色| 日韩人在线观看| 制服丝袜中文字幕第一页| 国产精品1luya在线播放| 亚洲欧美一区二区精品久久久 | 亚洲午夜一二三区视频| 波多野结衣50连登视频| 日韩成人在线一区| 亚洲国产免费av| 男人晚上看的视频| 99视频精品免费观看| 国产欧美一区二区三区四区| 蜜桃在线一区二区| 国产精品不卡在线观看| 国产av麻豆mag剧集| 欧美videos粗暴| 欧美精品一区二区三区蜜桃视频| www.av天天| 一区在线视频观看| 国产精品羞羞答答| 神马久久久久| 一区二区三区成人| 艹b视频在线观看| 天天做夜夜做人人爱精品| 久久精品这里热有精品| 无码人妻精品一区二区三区9厂| 国产精品一区在线观看乱码 | 日本精品一区二区三区四区的功能| 中文字幕亚洲影院| jizzjizz欧美69巨大| 国产69精品久久久久9| 国产情侣一区二区| 国产日韩欧美一区二区三区乱码 | av蜜臀在线| 91精品国产免费| jizzjizz日本少妇| 久久婷婷久久| 久久精品99| ririsao久久精品一区| 日韩一区二区不卡| 来吧亚洲综合网| 另类调教123区| 日韩欧美亚洲日产国产| 高清不卡av| 日韩的一区二区| 国产情侣在线视频| proumb性欧美在线观看| 国产高清不卡无码视频| 久久视频免费| 久久婷婷国产麻豆91天堂| 在线观看一二三区| 中文文精品字幕一区二区| 成人中文字幕av| 九九在线高清精品视频| 欧美野外猛男的大粗鳮| 水莓100国产免费av在线播放| 亚洲午夜久久久| 国产高潮失禁喷水爽到抽搐| 欧美久久综合| 国产精品国模大尺度私拍| 国产探花在线观看| 精品美女被调教视频大全网站| 69av视频在线| 成人激情免费网站| 久久久久久久久久久视频| 久久免费视频66| 69av在线视频| 日本中文字幕一区二区有码在线 | 国产女无套免费视频| 一区二区三区在线视频免费观看| 欧美性猛交xx| 国产人成精品一区二区三| 欧美日本亚洲| jizz亚洲女人高潮大叫| 久久精品国产亚洲7777| 性色av蜜臀av| 精品日韩中文字幕| 国产手机在线观看| 精品在线免费观看| 成人一区二区av| 日韩av中文字幕一区| 日产精品99久久久久久| 性开放的欧美大片| 欧美一区二区三区日韩| 国产成人啪精品午夜在线观看| 99精品视频一区| 美女网站视频黄色| 永久91嫩草亚洲精品人人| 国产精品久久久久av福利动漫| 欧产日产国产精品视频| 在线成人免费网站| 精品国产999久久久免费| 亚洲成a人片综合在线| 一级片视频免费看| 国产精一区二区三区| 亚洲熟妇av日韩熟妇在线| 欧美综合一区| 国产精品99久久久久久久| 韩日成人影院| 欧美成人小视频| 青青久在线视频免费观看| 欧美日韩视频在线观看一区二区三区 | 欧美中文字幕视频| 免费在线你懂的| 亚洲精品福利免费在线观看| 在线观看中文字幕网站| 亚洲午夜久久久久中文字幕久| 人妻av无码一区二区三区| 国产精品1区2区3区| 黑森林福利视频导航| 亚洲精品午夜av福利久久蜜桃| 久久精品国产精品国产精品污| 欧美亚洲二区| 日本欧美一二三区| 久草在线新免费首页资源站| 色青青草原桃花久久综合| 亚洲色图21p| 日韩一区二区在线观看| 久久久久久久久久久影院| 亚洲精品国产第一综合99久久| 日本黄色网址大全| 岛国av在线一区| 911福利视频| 久久在线精品| 日韩国产欧美亚洲| 欧美高清一区| 亚洲制服欧美久久| 国产影视精品一区二区三区| 国产日韩在线一区二区三区| 精品国产18久久久久久二百| 国产精品www| 男人av在线播放| 久久久久久久久电影| 国产网站在线免费观看| 伊人久久免费视频| 噜噜噜在线观看播放视频| 精品国产91亚洲一区二区三区婷婷 | 91精品久久| 久久久国产精品视频| 一级毛片视频在线| 亚洲图片在线综合| 色视频在线观看免费| 亚洲第一区第二区| 欧美一级一区二区三区| 精品奇米国产一区二区三区| 国产老妇伦国产熟女老妇视频| 欧美一a一片一级一片| 国产精品视频123| 欧美日韩人人澡狠狠躁视频| 日韩精品在线免费看| 亚洲国产视频网站| 国产一级二级毛片| 亚洲国产成人av网| 国产在线免费视频| 亚洲国产裸拍裸体视频在线观看乱了| 激情五月婷婷小说| 亚洲一卡二卡三卡四卡无卡久久| 久久久91视频| 亚洲大片一区二区三区| 国产亚洲精品女人久久久久久| 一区二区三区美女视频| 青青草免费av| 亚洲va韩国va欧美va精品| 亚州国产精品视频| 欧美午夜激情小视频| 91视频在线视频| 欧美无砖专区一中文字| 又污又黄的网站| 4hu四虎永久在线影院成人| 99久久精品国产成人一区二区| 制服丝袜av成人在线看| www.色视频| 亚洲韩国青草视频| 人成免费电影一二三区在线观看| 一区二区三区动漫| 暖暖日本在线观看| 色综合久久精品亚洲国产| а√在线天堂官网| 国产成人精品久久久| 日本精品另类| 91中文字精品一区二区| 日韩黄色网络| 涩涩日韩在线| 欧美理论在线| 免费大片在线观看| 久久91精品久久久久久秒播| 野战少妇38p| 国产亚洲短视频| 丝袜 亚洲 另类 欧美 重口| 午夜精品国产更新| 怡红院男人天堂| 精品不卡在线视频| 福利在线午夜| 久久99青青精品免费观看| 电影一区二区三区| 亚洲一区二区三区四区视频| 欧美精品国产白浆久久久久| 手机看片福利永久国产日韩| 欧美 日韩 国产 一区| 可以在线看的黄色网址| 国产一区二区免费视频| 成人h动漫精品一区| 亚洲色图视频网| 亚洲天堂视频网站| 欧美一区二区三区喷汁尤物| 黑人与亚洲人色ⅹvideos| 欧美多人爱爱视频网站| 电影亚洲精品噜噜在线观看| 超碰97在线资源| 欧美艳星介绍134位艳星| 成年人午夜视频在线观看| 裸体一区二区三区| 欧美做受喷浆在线观看| 亚洲欧美福利一区二区| 毛片毛片女人毛片毛片| 日韩免费高清av| h视频网站在线观看| 91精品国产99久久久久久| 国产欧美日韩电影| 日韩精品一线二线三线| 亚洲欧洲综合| 潘金莲一级淫片aaaaaaa| 中文字幕av在线一区二区三区| 日韩成人免费观看| 日韩欧美的一区| 蜜桃视频网站在线| 国产精品久久久久久久app| 麻豆国产欧美一区二区三区r| 亚洲免费视频播放| 日韩成人免费看| 粉嫩av蜜桃av蜜臀av| 婷婷夜色潮精品综合在线| 国产成人精品亚洲精品色欲| 少妇高潮久久久久久潘金莲| 天天综合网站| 欧美xxxx黑人又粗又长精品| 在线精品一区二区| 一区二区三区四区影院| 亚洲欧美韩国综合色| 亚洲无码久久久久久久| 中文字幕精品www乱入免费视频| 在线免费三级电影网站| 精品国产免费一区二区三区| 国产精品啊v在线| 可以看的av网址| 亚洲美女视频在线| 国产免费高清视频| 日韩一区二区久久久| 国产精品无码久久久久| 亚洲精品不卡| 美女在线视频一区| 美女网站视频色| 欧美精品精品一区| 麻豆视频在线免费观看| 国产在线视频2019最新视频| 久久亚洲国产| 亚洲第一天堂久久| 自拍偷拍欧美精品| 国产熟女一区二区三区五月婷 | 国产在线精品不卡| 国产免费美女视频| 91精品国产91热久久久做人人| 日本中文字幕在线视频| 91久久国产综合久久91精品网站| 911久久香蕉国产线看观看| 九九九九九九九九| 亚洲黄色尤物视频| 丰满岳乱妇国产精品一区| 国内精品400部情侣激情| 鲁大师精品99久久久| 黑人糟蹋人妻hd中文字幕| 26uuu亚洲综合色| 无码人妻丰满熟妇区bbbbxxxx | 亚洲综合久久av一区二区三区| 911国产精品| 精灵使的剑舞无删减版在线观看| 国产日韩一区欧美| 日韩国产精品大片| 少妇高潮在线观看| 精品久久久久久久久久久久久久久久久 | 午夜婷婷国产麻豆精品| 久久电影中文字幕| 成人国产在线激情| 亚洲福利久久| www色com| 欧美成人三级电影在线| 成人美女大片| 特级黄色录像片| 不卡的看片网站| 中文字幕日韩三级| 欧美激情精品久久久| 精品国精品国产自在久国产应用 | 免费看污视频的网站| 久久久999国产精品| 久久电影在线| 性chinese极品按摩| 五月天亚洲精品| 91在线品视觉盛宴免费| 亚洲一区久久久| 一本色道88久久加勒比精品| 四季av中文字幕| 精品国产电影一区二区| 欧美成人高清视频在线观看| 伊人影院久久| 波多野结衣国产精品| 五月天中文字幕一区二区| 成人福利在线| 国产精品麻豆免费版| 久久国内精品自在自线400部| 国产亚洲精品成人|