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

搞清這些陷阱,NULL和三值邏輯再也不作妖

運維 數據庫運維
NULL 用于表示缺失的值或遺漏的未知數據,不是某種具體類型的值。數據表中的 NULL 值表示該值所處的字段為空,值為 NULL 的字段沒有值,尤其要明白的是:NULL 值與 0 或者空字符串是不同的。

 [[281624]]

NULL

NULL 用于表示缺失的值或遺漏的未知數據,不是某種具體類型的值。數據表中的 NULL 值表示該值所處的字段為空,值為 NULL 的字段沒有值,尤其要明白的是:NULL 值與 0 或者空字符串是不同的。

兩種NULL

這種說法大家可能會覺得很奇怪,因為 SQL 里只存在一種 NULL 。然而在討論 NULL 時,我們一般都會將它分成兩種類型來思考:“未知”(unknown)和“不適用”(not applicable,inapplicable)。

以“不知道戴墨鏡的人眼睛是什么顏色”這種情況為例,這個人的眼睛肯定是有顏色的,但是如果他不摘掉眼鏡,別人就不知道他的眼睛是什么顏色。這就叫作未知。

而“不知道冰箱的眼睛是什么顏色”則屬于“不適用”。因為冰箱根本就沒有眼睛,所以“眼睛的顏色”這一屬性并不適用于冰箱。“冰箱的眼睛的顏色”這種說法和“圓的體積”“男性的分娩次數”一樣,都是沒有意義的。

平時,我們習慣了說“不知道”,但是“不知道”也分很多種。“不適用”這種情況下的 NULL ,在語義上更接近于“無意義”,而不是“不確定”。

這里總結一下:“未知”指的是“雖然現在不知道,但加上某些條件后就可以知道”;而“不適用”指的是“無論怎么努力都無法知道”。

關系模型的發明者 E.F. Codd 最先給出了這種分類。下圖是他對“丟失的信息”的分類。

“IS NULL”而非“= NULL”?

為什么必須寫成“IS NULL”,而不是“= NULL”?我相信不少人有這樣的困惑吧,尤其是相信剛學 SQL 的小伙伴。我們來看個具體的案例,假設我們有如下表以及數據:

  1. DROP TABLE IF EXISTS t_sample_null; 
  2. CREATE TABLE t_sample_null ( 
  3.     id INT(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵'
  4.     name VARCHAR(50) NOT NULL COMMENT '名稱'
  5.     remark VARCHAR(500) COMMENT '備注'
  6.     primary key(id) 
  7. ) COMMENT 'NULL樣例'
  8.  
  9. INSERT INTO t_sample_null(name, remark) 
  10. VALUES('zhangsan''張三'),('李四'NULL); 

我們要查詢備注為 NULL 的記錄(為 NULL 這種叫法本身是不對的,只是我們日常中已經叫習慣了,具體往下看),怎么查,很多新手會寫出這樣的 SQL:

  1. -- SQL 不報錯,但查不出結果 
  2. SELECT * FROM t_sample_null WHERE remark = NULL

 

執行時不報錯,但是查不出我們想要的結果, 這是為什么 ?這個問題我們先放著,我們往下看。

三值邏輯

這個三值邏輯不是三目運算,指的是三個邏輯值,有人可能有疑問了,邏輯值不是只有真(true)和假(false)嗎,哪來的第三個?

說這話時我們需要注意所處的環境,在主流的編程語言中(C、JAVA、Python、JS等)中,邏輯值確實只有 2 個,但在 SQL 中卻存在第三個邏輯值:unknown。這有點類似于我們平時所說的:對、錯、不知道。

邏輯值 unknown 和作為 NULL 的一種的 UNKNOWN (未知)是不同的東西。前者是明確的布爾型的邏輯值,后者既不是值也不是變量。

為了便于區分,前者采用小寫字母 unknown ,后者用大寫字母 UNKNOWN 來表示。為了讓大家理解兩者的不同,我們來看一個 x=x 這樣的簡單等式。x 是邏輯值 unknown 時,x=x 被判斷為 true ,而 x 是 UNKNOWN 時被判斷為 unknown 。

  1. -- 這個是明確的邏輯值的比較 
  2. unknown = unknown → true 
  3.  
  4. -- 這個相當于NULL = NULL 
  5. UNKNOWN = UNKNOWN → unknown 

三值邏輯的邏輯值表

NOT:

 

AND:

 

OR:

 

圖中藍色部分是三值邏輯中獨有的運算,這在二值邏輯中是沒有的。其余的 SQL 謂詞全部都能由這三個邏輯運算組合而來。從這個意義上講,這個幾個邏輯表可以說是 SQL 的母體(matrix)。

NOT 的話,因為邏輯值表比較簡單,所以很好記;但是對于 AND 和 OR,因為組合出來的邏輯值較多,所以全部記住非常困難。為了便于記憶,請注意這三個邏輯值之間有下面這樣的優先級順序:

  • AND 的情況:false > unknown > true;
  • OR 的情況:true > unknown > false。

優先級高的邏輯值會決定計算結果。例如 true AND unknown ,因為 unknown 的優先級更高,所以結果是 unknown 。而 true OR unknown 的話,因為 true 優先級更高,所以結果是 true 。

記住這個順序后就能更方便地進行三值邏輯運算了。特別需要記住的是,當 AND 運算中包含 unknown 時,結果肯定不會是 true (反之,如果AND 運算結果為 true ,則參與運算的雙方必須都為 true )。

  1. -- 假設 a = 2, b = 5, c = NULL,下列表達式的邏輯值如下 
  2.  
  3. a < b AND b > c  → unknown 
  4. a > b OR b < c   → unknown 
  5. a < b OR b < c   → true 
  6. NOT (b <> c)     → unknown 

“IS NULL” 而非 “= NULL”

我們再回到問題:為什么必須寫成“IS NULL”,而不是“= NULL”?

對 NULL 使用比較謂詞后得到的結果總是 unknown 。而查詢結果只會包含 WHERE 子句里的判斷結果為 true 的行,不會包含判斷結果為 false 和 unknown 的行。不只是等號,對 NULL 使用其他比較謂詞,結果也都是一樣的。

所以無論 remark 是不是 NULL ,比較結果都是 unknown ,那么永遠沒有結果返回。以下的式子都會被判為 unknown:

-- 以下的式子都會被判為 unknown

  1. -- 以下的式子都會被判為 unknown 
  2. NULL 
  3. NULL 
  4. NULL 
  5. <> NULL 
  6. NULL = NULL 

那么,為什么對 NULL 使用比較謂詞后得到的結果永遠不可能為真呢?

這是因為,NULL 既不是值也不是變量。NULL 只是一個表示“沒有值”的標記,而比較謂詞只適用于值。

因此,對并非值的 NULL 使用比較謂詞本來就是沒有意義的。“列的值為 “NULL ”、“NULL 值” 這樣的說法本身就是錯誤的。因為 NULL不是值,所以不在定義域(domain)中。

相反,如果有人認為 NULL 是值,那么我們可以倒過來想一下:它是什么類型的值?關系數據庫中存在的值必然屬于某種類型,比如字符型或數值型等。所以,假如 NULL 是值,那么它就必須屬于某種類型。

NULL 容易被認為是值的原因有兩個。

第一個是高級編程語言里面,NULL 被定義為了一個常量(很多語言將其定義為了整數0),這導致了我們的混淆。但是,SQL 里的 NULL 和其他編程語言里的 NULL 是完全不同的東西。

第二個原因是,IS NULL 這樣的謂詞是由兩個單詞構成的,所以我們容易把 IS 當作謂詞,而把 NULL 當作值。特別是 SQL 里還有 IS TRUE 、IS FALSE 這樣的謂詞,我們由此類推,從而這樣認為也不是沒有道理。但是正如講解標準 SQL 的書里提醒人們注意的那樣,我們應該把 IS NULL 看作是一個謂詞。因此,寫成 IS_NULL 這樣也許更合適。

溫柔的陷阱

比較謂詞和 NULL

排中律不成立。排中律指同一個思維過程中,兩個相互矛盾的思想不能同假,必有一真,即“要么A要么非A”。

假設我們有學生表:t_student:

  1. DROP TABLE IF EXISTS t_student; 
  2. CREATE TABLE t_student ( 
  3.     id INT(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵'
  4.     name VARCHAR(50) NOT NULL COMMENT '名稱'
  5.     age INT(3) COMMENT '年齡'
  6.     remark VARCHAR(500) NOT NULL DEFAULT '' COMMENT '備注'
  7.     primary key(id) 
  8. ) COMMENT '學生信息'
  9.  
  10. INSERT INTO t_student(name, age) 
  11. VALUE('zhangsan', 25),('wangwu', 60),('bruce', 32),('yzb'NULL),('boss', 18); 
  12.  
  13. SELECT * FROM t_student; 

表中數據 yzb 的 age 是 NULL,也就是說 yzb 的年齡未知。在現實世界里,yzb 是 20 歲,或者不是 20 歲,二者必居其一,這毫無疑問是一個真命題。那么在 SQL 的世界里了,排中律還適用嗎? 我們來看一個 SQL :

  1. SELECT * FROM t_student 
  2. WHERE age = 20 OR age <> 20; 

咋一看,這不就是查詢表中全部記錄嗎?我們來看下實際結果:

 

yzb 沒查出來,這是為什么?我們來分析下,yzb 的 age 是 NULL,那么這條記錄的判斷步驟如下:

  1. -- 1. 約翰年齡是 NULL (未知的 NULL !) 
  2. SELECT * 
  3. FROM t_student 
  4. WHERE age = NULL 
  5. OR age <> NULL
  6.  
  7. -- 2. 對 NULL 使用比較謂詞后,結果為unknown 
  8. SELECT * 
  9. FROM t_student 
  10. WHERE unknown 
  11. OR unknown; 
  12.  
  13. -- 3.unknown OR unknown 的結果是unknown (參考三值邏輯的邏輯值表) 
  14. SELECT * 
  15. FROM t_student 
  16. WHERE unknown; 

SQL 語句的查詢結果里只有判斷結果為 true 的行。要想讓 yzb 出現在結果里,需要添加下面這樣的 “第 3 個條件”:

-- 添加 3 個條件:年齡是20 歲,或者不是20 歲,或者年齡未知。

  1. -- 添加 3 個條件:年齡是20 歲,或者不是20 歲,或者年齡未知 
  2. SELECT * FROM t_student 
  3. WHERE age = 20  
  4.     OR age <> 20 
  5.     OR age IS NULL

CASE 表達式和 NULL。簡單 CASE 表達式如下:

  1. CASE col_1 
  2.     WHEN = 1 THEN 'o' 
  3.     WHEN NULL THEN 'x' 
  4. END 

這個 CASE 表達式一定不會返回 ×。這是因為,第二個 WHEN 子句是 col_1 = NULL 的縮寫形式。正如我們所知,這個式子的邏輯值永遠是 unknown ,而且 CASE 表達式的判斷方法與 WHERE 子句一樣,只認可邏輯值為 true 的條件。正確的寫法是像下面這樣使用搜索 CASE 表達式:

  1. CASE WHEN col_1 = 1 THEN 'o' 
  2.     WHEN col_1 IS NULL THEN 'x' 
  3. END 

NOT IN 和 NOT EXISTS 并非等價

我們在對 SQL 語句進行性能優化時,經常用到的一個技巧是將 IN 改寫成 EXISTS ,這是等價改寫,并沒有什么問題。但是,將 NOT IN 改寫成 NOT EXISTS 時,結果未必一樣。

我們來看個例子,我們有如下兩張表:t_student_A 和 t_student_B,分別表示 A 班學生與 B 班學生。

  1. DROP TABLE IF EXISTS t_student_A; 
  2. CREATE TABLE t_student_A ( 
  3.     id INT(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵'
  4.     name VARCHAR(50) NOT NULL COMMENT '名稱'
  5.     age INT(3) COMMENT '年齡'
  6.     city VARCHAR(50) NOT NULL COMMENT '城市'
  7.     remark VARCHAR(500) NOT NULL DEFAULT '' COMMENT '備注'
  8.     primary key(id) 
  9. ) COMMENT '學生信息'
  10.  
  11. INSERT INTO t_student_A(name, age, city) 
  12. VALUE 
  13. ('zhangsan', 25,'深圳市'),('wangwu', 60, '廣州市'), 
  14. ('bruce', 32, '北京市'),('yzb'NULL'深圳市'), 
  15. ('boss', 43, '深圳市'); 
  16.  
  17. DROP TABLE IF EXISTS t_student_B; 
  18. CREATE TABLE t_student_B ( 
  19.     id INT(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵'
  20.     name VARCHAR(50) NOT NULL COMMENT '名稱'
  21.     age INT(3) COMMENT '年齡'
  22.     city VARCHAR(50) NOT NULL COMMENT '城市'
  23.     remark VARCHAR(500) NOT NULL DEFAULT '' COMMENT '備注'
  24.     primary key(id) 
  25. ) COMMENT '學生信息'
  26.  
  27. INSERT INTO t_student_B(name, age, city) 
  28. VALUE 
  29. ('馬化騰', 45, '深圳市'),('馬三', 25, '深圳市'), 
  30. ('馬云', 43, '杭州市'),('李彥宏', 41, '深圳市'), 
  31. ('年輕人', 25, '深圳市'); 
  32.  
  33. SELECT * FROM t_student_A; 
  34. SELECT * FROM t_student_B; 

需求:查詢與 A 班住在深圳的學生年齡不同的 B 班學生,也就說查詢出 :馬化騰 和 李彥宏,這個 SQL 該如何寫,像這樣?

  1. -- 查詢與 A  班住在深圳的學生年齡不同的 B 班學生 ? 
  2. SELECT * FROM t_student_B 
  3. WHERE age NOT IN ( 
  4.     SELECT age FROM t_student_A  
  5.     WHERE city = '深圳市' 
  6. ); 

我們來看下執行結果:

 

我們發現結果是空,查詢不到任何數據,這是為什么 ?這里 NULL 又開始作怪了,我們一步一步來看看究竟發生了什么。

  1. -- 1. 執行子查詢,獲取年齡列表 
  2. SELECT * FROM t_student 
  3. WHERE age NOT IN(43, NULL, 25); 
  4.  
  5. -- 2. 用NOT 和IN 等價改寫NOT IN 
  6. SELECT * FROM t_student 
  7. WHERE NOT age IN (43, NULL, 25); 
  8.  
  9. -- 3. 用OR 等價改寫謂詞IN 
  10. SELECT * FROM t_student 
  11. WHERE NOT ( (age = 43) OR (age = NULLOR (age = 25) ); 
  12.  
  13. -- 4. 使用德· 摩根定律等價改寫 
  14. SELECT * FROM t_student 
  15. WHERE NOT (age = 43) AND NOT(age = NULLAND NOT (age = 25); 
  16.  
  17. -- 5. 用<> 等價改寫 NOT 和 = 
  18. SELECT * FROM t_student 
  19. WHERE (age <> 43) AND (age <> NULLAND (age <> 25); 
  20.  
  21. -- 6. 對NULL 使用<> 后,結果為 unknown 
  22. SELECT * FROM t_student 
  23. WHERE (age <> 43) AND unknown AND (age <> 25); 
  24.  
  25. -- 7.如果 AND 運算里包含 unknown,則結果不為true(參考三值邏輯的邏輯值表) 
  26. SELECT * FROM t_student 
  27. WHERE false 或 unknown; 

可以看出,在進行了一系列的轉換后,沒有一條記錄在 WHERE 子句里被判斷為 true 。也就是說,如果 NOT IN 子查詢中用到的表里被選擇的列中存在 NULL ,則 SQL 語句整體的查詢結果永遠是空。這是很可怕的現象!

為了得到正確的結果,我們需要使用 EXISTS 謂詞。

  1. -- 正確的SQL 語句:馬化騰和李彥宏將被查詢到 
  2. SELECT * FROM t_student_B B 
  3. WHERE NOT EXISTS (  
  4.     SELECT * FROM t_student_A A 
  5.     WHERE B.age = A.age 
  6.     AND A.city = '深圳市'  
  7. ); 

執行結果如下:

 

同樣地,我們再來一步一步地看看這段 SQL 是如何處理年齡為 NULL 的行的:

  1. -- 1. 在子查詢里和 NULL 進行比較運算,此時 A.age 是 NULL 
  2. SELECT * FROM t_student_B B 
  3. WHERE NOT EXISTS (  
  4.     SELECT * FROM t_student_A A 
  5.     WHERE B.age = NULL 
  6.     AND A.city = '深圳市'  
  7. ); 
  8.  
  9. -- 2. 對NULL 使用“=”后,結果為 unknown 
  10. SELECT * FROM t_student_B B 
  11. WHERE NOT EXISTS (  
  12.     SELECT * FROM t_student_A A 
  13.     WHERE unknown 
  14.     AND A.city = '深圳市'  
  15. ); 
  16.  
  17. -- 3. 如果AND 運算里包含 unknown,結果不會是true 
  18. SELECT * FROM t_student_B B 
  19. WHERE NOT EXISTS (  
  20.     SELECT * FROM t_student_A A 
  21.     WHERE false 或 unknown 
  22. ); 
  23.  
  24. -- 4. 子查詢沒有返回結果,因此相反地,NOT EXISTS 為 true 
  25. SELECT * FROM t_student_B B 
  26. WHERE true

也就是說,yzb 被作為 “與任何人的年齡都不同的人” 來處理了。EXISTS 只會返回 true 或者false,永遠不會返回 unknown。因此就有了 IN 和 EXISTS 可以互相替換使用,而 NOT IN和 NOT EXISTS 卻不可以互相替換的混亂現象。

還有一些其他的陷阱,比如:限定謂詞和 NULL、限定謂詞和極值函數不是等價的、聚合函數和 NULL 等等。

總結

1、NULL 用于表示缺失的值或遺漏的未知數據,不是某種具體類型的值,不能對其使用謂詞。

2、對 NULL 使用謂詞后的結果是 unknown,unknown 參與到邏輯運算時,SQL 的運行會和預想的不一樣。

3、 IS NULL 整個是一個謂詞,而不是:IS 是謂詞,NULL 是值;類似的還有 IS TRUE、IS FALSE。

4、要想解決 NULL 帶來的各種問題,最佳方法應該是往表里添加 NOT NULL 約束來盡力排除 NULL。

我的項目中有個硬性規定:所有字段必須是 NOT NULL,建表的時候就加上此約束。

 

責任編輯:武曉燕 來源: DBAplus社群
相關推薦

2022-09-13 08:33:05

SQLNULL三值邏輯

2020-04-30 09:19:56

Docker容器虛擬機

2020-01-21 21:15:16

WiFi網絡WiFi6

2013-10-09 13:25:42

產品經理產品

2021-12-21 09:05:46

命令Linux敲錯

2024-04-15 00:08:00

MySQLInnoDB數據庫

2018-02-07 08:01:20

windows微軟windows 10

2021-12-01 17:24:11

編程學習網站程序員

2024-02-26 00:00:00

Docker容器

2021-06-08 07:48:26

數據 Python開發

2015-05-29 09:01:48

2025-05-28 03:20:00

布爾值編程True

2020-06-15 08:03:17

大文件OOM內存

2017-01-23 08:41:43

云計算

2018-10-11 15:51:32

ChromeGoogle瀏覽器

2014-07-18 15:54:04

goTenna:隨身無

2021-03-26 15:18:11

代碼工具Mockoon

2021-08-12 11:05:07

C++語言內存泄露

2023-11-27 17:11:02

數據庫oracle

2020-04-20 15:00:22

DevOps工具代碼
點贊
收藏

51CTO技術棧公眾號

日韩久久一区二区| 西西裸体人体做爰大胆久久久| 欧美精品少妇一区二区三区| 亚洲一卡二卡区| 国产毛片在线视频| 亚洲高清二区| 日韩中文字幕免费| 久久奇米777| 中文字幕免费精品一区高清| 日本特黄在线观看| 一区二区乱码| 亚洲日本一区二区| 欧美激情www| 国产精品视频无码| 国产欧美精品久久| 久久精品国产免费观看| 欧美在线一级片| 91成人精品观看| 黑人极品videos精品欧美裸| 久久免费视频2| 天天干天天干天天干| 久久99国产精品久久99| 欧美亚洲日本黄色| 农村黄色一级片| 精品国产一区探花在线观看 | 粉嫩一区二区三区在线观看| 欧美色视频日本高清在线观看| 天天干天天色天天爽| 久草在线网址| 成人午夜碰碰视频| 亚洲综合在线做性| 中文字幕在线网址| 久久婷婷麻豆| 91国产在线精品| 毛片aaaaa| 亚洲精品电影| 日日噜噜噜夜夜爽亚洲精品| 精品国产成人亚洲午夜福利| 欧美大胆视频| 337p日本欧洲亚洲大胆色噜噜| 国产一级片自拍| 激情久久一区二区| 在线中文字幕不卡| 欧美 日韩 国产 激情| 色戒汤唯在线观看| 亚洲成人动漫一区| 日韩一级性生活片| 超碰在线资源| 一区二区高清视频在线观看| 免费高清在线一区| 久久成人人人人精品欧| 肉色超薄丝袜脚交69xx图片| 精品国产一区二区三区四区| 亚洲人成亚洲人成在线观看| 素人fc2av清纯18岁| 国语一区二区三区| 亚洲激情自拍图| 成人欧美精品一区二区| jizzjizzjizz欧美| 亚洲成人中文字幕| 亚洲观看黄色网| 色婷婷狠狠五月综合天色拍 | 国产精品久久网| 九九热最新视频| 日韩av一级片| 国产精品尤物福利片在线观看| 丰满熟女人妻一区二区三| 日韩国产精品大片| 国产精品午夜国产小视频| 亚洲在线免费观看视频| 国产一区二区三区不卡在线观看| 亚洲精品欧美日韩专区| 黄色成人一级片| 91亚洲精华国产精华精华液| 欧美日韩精品免费看| 日韩一区二区三区久久| 91精品国产91久久久久游泳池| 日本一区免费视频| 最新视频 - x88av| 高潮在线视频| 色偷偷成人一区二区三区91| 亚洲这里只有精品| 欧美视频三区| 亚洲国产精品va在线| 国产又粗又猛又爽视频| 亚洲精品888| 91国内揄拍国内精品对白| 天干夜夜爽爽日日日日| 精品一二三四区| 高清不卡日本v二区在线| 亚洲欧美日韩动漫| 成人欧美一区二区三区白人| av无码久久久久久不卡网站| 成人av三级| 777亚洲妇女| 免费黄色三级网站| 波多野结衣一区| 九色精品美女在线| 精品黑人一区二区三区| 国产剧情一区二区三区| 欧美美乳视频网站在线观看| a免费在线观看| 在线观看日韩一区| 宇都宫紫苑在线播放| 蜜桃精品噜噜噜成人av| 欧美成人免费一级人片100| 亚洲av中文无码乱人伦在线视色| 狠狠狠色丁香婷婷综合激情| 久久伊人资源站| 2024最新电影免费在线观看| 色av成人天堂桃色av| 欧美图片自拍偷拍| 久久亚洲成人| 欧美亚洲视频在线看网址| www香蕉视频| 国产精品久久午夜| 精品国产免费av| 亚洲三级av| 久久久精品一区| 国产裸体美女永久免费无遮挡| 懂色av一区二区三区免费看| 亚洲国产欧美一区二区三区不卡| 国内精彩免费自拍视频在线观看网址| 制服丝袜中文字幕亚洲| 亚洲天堂岛国片| 午夜亚洲性色视频| 国产高清自拍99| a在线免费观看| 欧美年轻男男videosbes| 自拍偷拍中文字幕| 亚洲神马久久| 国产另类第一区| 欧洲性视频在线播放| 欧美日韩国产三级| 91视频免费看片| 日韩精品成人一区二区在线| 久久久婷婷一区二区三区不卡| 国产丝袜精品丝袜| 日韩欧美不卡在线观看视频| 日韩精品123区| 国内精品在线播放| 最新av在线免费观看| 日韩三区四区| 日韩一区二区福利| 一区二区三区免费在线| 国产精品色在线| 99热这里只有精品在线播放| 国产永久精品大片wwwapp| 日本电影亚洲天堂| 国产天堂素人系列在线视频| 91福利精品第一导航| 在线观看日本中文字幕| 视频一区视频二区中文| 日本一区视频在线观看| 国产成人精品一区二区三区视频 | 国产日韩一区二区三区| 菠萝蜜视频在线观看www入口| 日韩美女一区二区三区四区| 久久婷婷综合国产| 波多野结衣中文字幕一区二区三区| 男的插女的下面视频| 牛牛精品成人免费视频| 欧日韩在线观看| 粉嫩av一区| 欧美美女视频在线观看| 欧美日韩免费做爰视频| 成人免费av在线| 久久久久久久久久久免费视频| 久久成人高清| 国产日本欧美一区| 在线xxxx| 精品一区二区三区电影| 最新在线中文字幕| 一区二区三区中文在线| 玖玖爱在线精品视频| 首页国产欧美日韩丝袜| 三级网在线观看| 国产精品18hdxxxⅹ在线| 97久久精品国产| 尤物网在线观看| 欧美电影精品一区二区| 日韩特级黄色片| 国产精品色在线| 欧美极品jizzhd欧美仙踪林| 老牛影视一区二区三区| 国产高清免费在线| 久久99精品久久久久久欧洲站| 日本久久久a级免费| 国产丝袜在线| 亚洲精品美女久久久久| 夜夜爽8888| 午夜视频在线观看一区| 阿v天堂2014| 成人听书哪个软件好| 噼里啪啦国语在线观看免费版高清版| 影视亚洲一区二区三区| 蜜桃网站成人| 激情视频亚洲| 国产99久久精品一区二区永久免费| 麻豆传媒视频在线观看| 日韩国产欧美精品在线| 国产喷水吹潮视频www| 精品国产91久久久久久| 国产精品免费在线视频| 91农村精品一区二区在线| 樱花草www在线| 午夜一级在线看亚洲| 337p亚洲精品色噜噜狠狠p| 偷拍视屏一区| 国产精品播放| 在线视频成人| 国产精品久久久久久久久久三级| 久久av色综合| 久久久精品999| 国产高清免费在线播放| 亚洲国产一区二区三区四区| 国产精品爽爽久久| 欧美亚洲国产一卡| 你懂的国产在线| 亚洲午夜羞羞片| 久久国产精品国语对白| 欧美激情一区二区三区四区| 亚洲欧美在线不卡| 国产成人日日夜夜| 国产精品中文久久久久久| 麻豆一区二区99久久久久| 免费av网址在线| 亚洲人成毛片在线播放女女| www.18av.com| 女生裸体视频一区二区三区| 亚洲欧美精品在线观看| 亚洲三级网址| 久久人人爽爽人人爽人人片av| 91久久精品无嫩草影院| 亚洲iv一区二区三区| 亚洲老司机网| 成人h视频在线| 全球中文成人在线| 国产精品无av码在线观看| 国产福利亚洲| 91精品国产综合久久久久久久久| 国产精品久久久久av电视剧| 日韩av免费在线观看| 欧美gay视频| 国产国产精品人在线视| 亚洲精品一级二级| 国产精品成人一区二区| 播放一区二区| 国产伦精品免费视频| 亚洲欧洲日韩精品在线| 成人h猎奇视频网站| 麻豆精品在线| 国产精品视频免费一区二区三区 | 欧美另类高清视频在线| 狠狠做六月爱婷婷综合aⅴ| 日韩经典在线视频| 欧美日韩中文一区二区| 欧洲精品亚洲精品| 禁断一区二区三区在线| 亚洲乱码一区二区三区| 五月开心六月丁香综合色啪| 黄色一级大片免费| 综合久久婷婷| www.99热这里只有精品| 美女91精品| 一女二男3p波多野结衣| 国产精品小仙女| 天堂www中文在线资源| 91蝌蚪porny成人天涯| www色com| 亚洲男女毛片无遮挡| 国产精品成人国产乱| 狠狠色狠色综合曰曰| 最新中文字幕免费| 欧美大片日本大片免费观看| 三级黄视频在线观看| 色偷偷888欧美精品久久久| av电影高清在线观看| 91高清视频免费| 国产精品蜜月aⅴ在线| 99国产精品久久久久老师| 农村少妇一区二区三区四区五区 | 91久久综合亚洲鲁鲁五月天| 亚洲精品一区二区三区中文字幕| 久久久福利视频| 天天综合一区| 久久久999视频| 狠狠色伊人亚洲综合成人| 在线天堂www在线国语对白| 亚洲国产岛国毛片在线| 欧美激情一区二区视频| 一本色道亚洲精品aⅴ| 国产精品自拍电影| 国产午夜精品理论片a级探花| 麻豆网站在线| 国产91精品青草社区| 精品一区二区三区中文字幕| 久久久神马电影| 欧美精品入口| 日本 片 成人 在线| 成人看片黄a免费看在线| 国产成人一区二区在线观看| 亚洲高清不卡在线观看| 中文字幕在线观看国产| 亚洲国产精品美女| 超碰在线免费播放| 国产精品a久久久久久| 国产精品午夜av| 欧美 日韩 国产 在线观看 | 欧美在线亚洲在线| 96sao精品免费视频观看| 久久久久久亚洲精品不卡4k岛国| 亚洲成人tv| 天天操天天摸天天爽| 99国产精品久久久久久久久久| 国精品无码一区二区三区| 欧美在线一区二区三区| 婷婷在线观看视频| 色综合天天狠天天透天天伊人| 国产激情久久| 欧美性xxxx69| 亚洲在线视频| 波多野结衣一二三区| 一区二区三区四区五区视频在线观看| 国产精品第6页| 亚洲欧洲日韩国产| 日韩脚交footjobhd| 国内一区二区三区在线视频| 欧美日韩国产欧| 999热精品视频| 亚洲色欲色欲www在线观看| 国产在线观看第一页| 国产婷婷成人久久av免费高清 | 国产成人97精品免费看片| 精品少妇一区| 免费不卡av在线| 成人激情黄色小说| 青娱乐91视频| 日韩精品专区在线影院观看| 成人在线app| 亚洲一区国产精品| 欧美精品自拍| 污网站免费观看| 黄色成人av网| 欧洲成人av| 国产国产精品人在线视| 欧洲激情视频| 国产九九在线观看| 中文字幕一区免费在线观看| 国产孕妇孕交大片孕| 最近日韩中文字幕中文| 国产一区精品福利| youjizz.com亚洲| 国产乱子伦视频一区二区三区| 精品自拍偷拍视频| 日韩精品资源二区在线| 草草在线视频| 日韩av电影免费在线观看| 日本不卡一区二区三区| 亚洲综合久久av一区二区三区| 日韩一区二区三区三四区视频在线观看 | 99精品在线免费| 毛片基地在线观看| 中文字幕欧美日韩在线| 亚洲成人1区| 欧美视频在线第一页| 播五月开心婷婷综合| 亚洲天堂五月天| 久久精品视频免费播放| 成人三级毛片| 韩国日本美国免费毛片| 亚洲人成网站影音先锋播放| 亚洲精品久久久蜜桃动漫 | 中文字幕亚洲一区二区三区| 日韩美香港a一级毛片| 97在线国产视频| 久久精品人人做人人爽97| 亚洲图片小说视频| 欧美精品福利在线| 欧美**字幕| 免费不卡av网站| 一本色道久久加勒比精品| 黄色在线论坛| 久久久99国产精品免费| 韩国毛片一区二区三区| 亚洲免费黄色网址| 久久久国产视频91| 亚洲免费毛片| 真实乱偷全部视频| 色悠久久久久综合欧美99| 2024短剧网剧在线观看| 欧洲亚洲一区| 成人毛片视频在线观看| 亚洲无码精品国产| 51视频国产精品一区二区| 久久久久久久久久久妇女| 国产精品无码永久免费不卡| 91麻豆精品国产91久久久久| 国产日韩电影| 欧美精品久久久久久久久久久|