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

SQL數(shù)據(jù)分析系列之視圖

大數(shù)據(jù) 數(shù)據(jù)分析
設(shè)計良好的應(yīng)用程序通常會在保持實現(xiàn)細節(jié)私有性的同時公開一個公共接口,從而在不影響終端用戶的情況下支持將來的設(shè)計變動。在設(shè)計數(shù)據(jù)庫時,通過保持表的私有性并允許用戶僅通過一組視圖訪問數(shù)據(jù),你可以獲得類似的結(jié)果。

[[407941]]

本文轉(zhuǎn)載自微信公眾號「數(shù)據(jù)與智能」,作者Alan Beaulieu。轉(zhuǎn)載本文請聯(lián)系數(shù)據(jù)與智能公眾號。

設(shè)計良好的應(yīng)用程序通常會在保持實現(xiàn)細節(jié)私有性的同時公開一個公共接口,從而在不影響終端用戶的情況下支持將來的設(shè)計變動。在設(shè)計數(shù)據(jù)庫時,通過保持表的私有性并允許用戶僅通過一組視圖訪問數(shù)據(jù),你可以獲得類似的結(jié)果。本章致力于定義什么是視圖、如何創(chuàng)建它們、何時使用它們以及如何使用它們。

1. 什么是視圖

視圖其實就是一種數(shù)據(jù)查詢機制。與表不同,視圖不涉及數(shù)據(jù)存儲,所以不必擔(dān)心視圖會占用磁盤空間??梢酝ㄟ^命名select語句來創(chuàng)建視圖,將其保存以供其他人使用。其他用戶可以使用該視圖訪問數(shù)據(jù),就像他們直接查詢表一樣(實際上,他們甚至可能不知道自己正在使用視圖)。

舉一個簡單的例子,假設(shè)你希望部分隱藏customer表中的電子郵件地址。例如,市場營銷部門可能需要訪問電子郵件地址才能發(fā)布促銷廣告,但公司的隱私政策有規(guī)定必須保證這些數(shù)據(jù)的安全。因此不允許直接訪問customer表,而是定義一個名為customer_vw的視圖,并授權(quán)給所有非營銷人員使用以訪問客戶數(shù)據(jù)。視圖定義如下:

  1. CREATE VIEW customer_vw 
  2.  (customer_id, 
  3.  first_name, 
  4.  last_name, 
  5.  email  
  6.  ) 
  7. AS 
  8. SELECT  
  9.  customer_id, 
  10.  first_name, 
  11.  last_name, 
  12.  concat(substr(email,1,2), '*****', substr(email, -4)) email 
  13. FROM customer; 

語句的第一部分列出了視圖的列名,這些列名可能與基礎(chǔ)表的列名不同。語句的第二部分是select語句,它必須為視圖中的每一列提供一個表達式。email列的生成方法是:獲取電子郵件地址的前兩個字符,與“*****”連接,然后與電子郵件地址的最后四個字符連接。

執(zhí)行create view語句時,數(shù)據(jù)庫服務(wù)器只簡單地存儲視圖定義以供將來使用。若不執(zhí)行查詢,也就不會檢索或存儲任何數(shù)據(jù)。創(chuàng)建視圖后,用戶可以像查詢表一樣使用它進行查詢,如下所示:

  1. mysql> SELECT first_name, last_name, email 
  2.  -> FROM customer_vw; 
  3. +-------------+--------------+-------------+ 
  4. | first_name | last_name | email | 
  5. +-------------+--------------+-------------+ 
  6. | MARY | SMITH | MA*****.org | 
  7. | PATRICIA | JOHNSON | PA*****.org | 
  8. | LINDA | WILLIAMS | LI*****.org | 
  9. | BARBARA | JONES | BA*****.org | 
  10. | ELIZABETH | BROWN | EL*****.org | 
  11. ... 
  12. | ENRIQUE | FORSYTHE | EN*****.org | 
  13. | FREDDIE | DUGGAN | FR*****.org | 
  14. | WADE | DELVALLE | WA*****.org | 
  15. | AUSTIN | CINTRON | AU*****.org | 
  16. +-------------+--------------+-------------+ 
  17. 599 rows in set (0.00 sec) 

盡管customer_vw視圖定義包含customer表的四列,但前面的查詢只檢索其中三列。正如你將在本章后面看到的,如果視圖中的某些列被附加到函數(shù)或子查詢,那么這會是一個重要的區(qū)別。

從用戶的角度來看,視圖看起來就像一個表。要想知道視圖中有哪些列是可用的,可以使用MySQL(或Oracle)的describe命令查看:

  1. mysql> describe customer_vw; 
  2. +-------------+----------------------+------+-----+---------+-------+ 
  3. | Field | Type | Null | Key | Default | Extra | 
  4. +-------------+----------------------+------+-----+---------+-------+ 
  5. | customer_id | smallint(5) unsigned | NO | | 0 | | 
  6. | first_name | varchar(45) | NO | | NULL | | 
  7. | last_name | varchar(45) | NO | | NULL | | 
  8. | email | varchar(11) | YES | | NULL | | 
  9. +-------------+----------------------+------+-----+---------+-------+ 
  10. rows in set (0.00 sec) 

在通過視圖進行查詢時,可以自由使用select語句中的任何子句,包括group by、having和order by。舉個例子:

  1. mysql> SELECT first_name, count(*), min(last_name), max(last_name) 
  2.  -> FROM customer_vw 
  3.  -> WHERE first_name LIKE 'J%' 
  4.  -> GROUP BY first_name 
  5.  -> HAVING count(*) > 1 
  6.  -> ORDER BY 1; 
  7. +------------+----------+----------------+----------------+ 
  8. | first_name | count(*) | min(last_name) | max(last_name) | 
  9. +------------+----------+----------------+----------------+ 
  10. | JAMIE | 2 | RICE | WAUGH | 
  11. | JESSIE | 2 | BANKS | MILAM | 
  12. +------------+----------+----------------+----------------+ 
  13. rows in set (0.00 sec) 

此外,你還可以在查詢中連接視圖到其他表(或者甚至視圖),如下所示:

  1. mysql> SELECT cv.first_name, cv.last_name, p.amount 
  2.  -> FROM customer_vw cv 
  3.  -> INNER JOIN payment p 
  4.  -> ON cv.customer_id = p.customer_id 
  5.  -> WHERE p.amount >= 11; 
  6. +------------+-----------+--------+ 
  7. | first_name | last_name | amount | 
  8. +------------+-----------+--------+ 
  9. | KAREN | JACKSON | 11.99 | 
  10. | VICTORIA | GIBSON | 11.99 | 
  11. | VANESSA | SIMS | 11.99 | 
  12. | ALMA | AUSTIN | 11.99 | 
  13. | ROSEMARY | SCHMIDT | 11.99 | 
  14. | TANYA | GILBERT | 11.99 | 
  15. | RICHARD | MCCRARY | 11.99 | 
  16. | NICHOLAS | BARFIELD | 11.99 | 
  17. | KENT | ARSENAULT | 11.99 | 
  18. | TERRANCE | ROUSH | 11.99 | 
  19. +------------+-----------+--------+ 
  20. 10 rows in set (0.01 sec) 

此查詢將customer_vw視圖與payment表連接,以查找租賃電影花費了11美元或更多金額的客戶。

2. 為何要用視圖

在上一節(jié)中,我演示了一個簡單的視圖,它的目的是掩蓋customer.email列。雖然視圖通常被用于此種目的,但還有更多理由使用視圖,如下小節(jié)所述。

2.1 數(shù)據(jù)安全

如果你創(chuàng)建一個表并允許用戶查詢,那么他們將能夠訪問表中的每一列和每一行數(shù)據(jù)。但正如我前面提到的,你的表中有些列可能包含敏感信息,比如身份證號或信用卡號碼,把包括這些敏感數(shù)據(jù)在內(nèi)的表數(shù)據(jù)公開給用戶訪問絕對不是一個好主意,而且還可能違反公司的隱私政策,甚至觸犯州或聯(lián)邦法律。

對于這些情況,最好的方法是保持表的私有性(即不向任何用戶授予select權(quán)限),然后創(chuàng)建一個或多個視圖省略或者模糊(比如對customer_vw.email列采取'*****'替代部分內(nèi)容)這些敏感信息。你還可以通過向視圖定義中添加where子句來限制一組用戶只能訪問哪些行。例如,下面的視圖定義將非活躍客戶排除在外:

  1. CREATE VIEW active_customer_vw 
  2.  (customer_id, 
  3.  first_name, 
  4.  last_name, 
  5.  email 
  6.  ) 
  7. AS 
  8. SELECT 
  9.  customer_id, 
  10.  first_name, 
  11.  last_name, 
  12.  concat(substr(email,1,2), '*****', substr(email, -4)) email 
  13. FROM customer 
  14. WHERE active = 1; 

如果將此視圖提供給市場營銷部門,他們將能夠避免向非活躍客戶發(fā)送信息,因為視圖的where子句中的條件將始終包含在查詢中。

注意

Oracle Database用戶還可以用另一種方法保證表中行和列的安全:虛擬私有數(shù)據(jù)庫(Virtual Private Database,VPD)。VPD允許你為表附加策略,然后服務(wù)器將根據(jù)需要修改用戶的查詢以執(zhí)行此策略。例如,如果你制定了策略指定銷售和市場營銷部門的成員只能看到活躍客戶,則條件active=1將添加到他們對customer表的所有查詢中。

2.2 數(shù)據(jù)聚合

報表程序通常需要聚合數(shù)據(jù),而視圖就是一種實現(xiàn)該功能的很好的方法,可以使數(shù)據(jù)看起來像是已經(jīng)被預(yù)聚合并存儲在數(shù)據(jù)庫中。例如,假設(shè)一個應(yīng)用程序每月生成一個報表,用于顯示每類電影的總銷售額,這樣經(jīng)理就可以決定將哪些新電影添加到庫存中。你可以為他們提供以下視圖,而不是允許其直接針對表編寫查詢:

  1. CREATE VIEW sales_by_film_category 
  2. AS 
  3. SELECT 
  4.  c.name AS category, 
  5.  SUM(p.amount) AS total_sales 
  6. FROM payment AS p 
  7.  INNER JOIN rental AS r ON p.rental_id = r.rental_id 
  8.  INNER JOIN inventory AS i ON r.inventory_id = i.inventory_id 
  9.  INNER JOIN film AS f ON i.film_id = f.film_id 
  10.  INNER JOIN film_category AS fc ON f.film_id = fc.film_id 
  11.  INNER JOIN category AS c ON fc.category_id = c.category_id 
  12. GROUP BY c.name 
  13. ORDER BY total_sales DESC

這種方法給數(shù)據(jù)庫設(shè)計者提供很大的靈活性。如果將來某個時候你為了提高查詢性能,要將數(shù)據(jù)預(yù)聚合到表中而不是使用視圖求和,那么你可以創(chuàng)建一個film_category_sales表,用聚合數(shù)據(jù)加載該表,然后修改sales_by_film_category視圖定義以從此表中檢索數(shù)據(jù)。之后,所有使用sales_by_film_category視圖的查詢都將從新的film_category_sales表中檢索數(shù)據(jù),這意味著用戶無需修改查詢就可以提高性能。

2.3 隱藏復(fù)雜性

部署視圖最常見的原因之一是為了保護終端用戶不受復(fù)雜性的影響。例如,假設(shè)每個月都會創(chuàng)建一個報表以顯示有關(guān)所有電影的信息,以及電影類別、電影中出現(xiàn)的演員數(shù)量、庫存中的總拷貝數(shù)以及每部電影的租賃數(shù)量。你可以提供如下視圖,而不是讓他們使用六個不同的表檢索數(shù)據(jù):

  1. CREATE VIEW film_stats 
  2. AS 
  3. SELECT f.film_id, f.title, f.description, f.rating, 
  4.  (SELECT c.name 
  5.  FROM category c 
  6.  INNER JOIN film_category fc 
  7.  ON c.category_id = fc.category_id 
  8.  WHERE fc.film_id = f.film_id) category_name, 
  9.  (SELECT count(*) 
  10.  FROM film_actor fa 
  11.  WHERE fa.film_id = f.film_id 
  12.  ) num_actors, 
  13.  (SELECT count(*) 
  14.  FROM inventory i 
  15.  WHERE i.film_id = f.film_id 
  16.  ) inventory_cnt, 
  17.  (SELECT count(*) 
  18.  FROM inventory i 
  19.  INNER JOIN rental r 
  20.  ON i.inventory_id = r.inventory_id 
  21.  WHERE i.film_id = f.film_id 
  22.  ) num_rentals 
  23. FROM film f; 

這個視圖定義很有趣,因為即使可以通過視圖檢索來自六個不同表的數(shù)據(jù),查詢的from子句也只有一個表(film)。來自其他五個表的數(shù)據(jù)是使用標(biāo)量子查詢生成的。如果有人使用此視圖但未引用category_name、num_actors、inventory_cnt或num_rentals列,則不會執(zhí)行任何子查詢。這種方法允許在不連接其他五個表的情況下使用視圖從film表中提取描述性信息。

2.4 連接分區(qū)數(shù)據(jù)

一些數(shù)據(jù)庫設(shè)計將大型表分解為多個小塊以提高性能。例如,如果payment表變大了,設(shè)計者可能會決定將其分為兩個表:payment_current(保存最近六個月的數(shù)據(jù))和payment_historical(保存六個月前的所有數(shù)據(jù))。如果客戶希望查看某個特定客戶的所有交易,則需要同時查詢這兩個表。但是,通過創(chuàng)建一個視圖以查詢兩個表并組合查詢結(jié)果,可以使其看起來像是所有交易數(shù)據(jù)都存儲在一個表中。視圖定義如下:

  1. CREATE VIEW payment_all 
  2.  (payment_id, 
  3.  customer_id, 
  4.  staff_id, 
  5.  rental_id, 
  6.  amount, 
  7.  payment_date, 
  8.  last_update 
  9.  ) 
  10. AS 
  11. SELECT payment_id, customer_id, staff_id, rental_id, 
  12.  amount, payment_date, last_update 
  13. FROM payment_historic 
  14. UNION ALL 
  15. SELECT payment_id, customer_id, staff_id, rental_id, 
  16.  amount, payment_date, last_update 
  17. FROM payment_current; 

在這種情況下使用視圖是一個好主意,因為它允許設(shè)計人員更改基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)而無需強制所有數(shù)據(jù)庫用戶修改其查詢。

3. 可更新的視圖

如果為用戶提供了一組用于數(shù)據(jù)檢索的視圖,但如果用戶還要修改同一數(shù)據(jù),又該怎么辦呢?例如,強制用戶使用視圖檢索數(shù)據(jù),然后允許用戶使用update或insert語句直接修改基礎(chǔ)表——這似乎有點奇怪。為此,MySQL、Oracle Database和SQL Server都允許在遵守某些規(guī)則的前提下通過視圖修改數(shù)據(jù)。對于MySQL,如果滿足以下條件,則視圖是可更新的:

  • 不使用聚合函數(shù)(max()、min()、avg()等);
  • 視圖不使用group by或having子句;
  • select或from子句中不存在子查詢,且where子句中的任何子查詢都不引用from子句中的表;
  • 視圖不使用union、union all或distinct;
  • from子句至少包含一個表或可更新視圖;
  • 如果有多個表或視圖,那么from子句只使用內(nèi)部連接。

為了演示可更新視圖的實用性,我們從簡單的視圖定義開始,然后逐步深入更復(fù)雜的視圖。

3.1 更新簡單視圖

本章開頭的視圖非常簡單,讓我們看看下面這個例子:

  1. CREATE VIEW customer_vw  
  2.  (customer_id,  
  3.  first_name,  
  4.  last_name,  
  5.  email  
  6.  )  
  7. AS  
  8. SELECT  
  9.  customer_id,  
  10.  first_name,  
  11.  last_name,  
  12.  concat(substr(email,1,2), '*****', substr(email, -4)) email  
  13. FROM customer; 

視圖customer_vw查詢單個表,其四列中只有一列是通過表達式派生出來的。此視圖定義沒有違反前面列出的任何限制,因此你可以使用它修改customer表中的數(shù)據(jù)。下面讓我們使用該視圖更新Mary Smith的姓氏(更新為Smith Allen):

  1. mysql> UPDATE customer_vw 
  2.  -> SET last_name = 'SMITH-ALLEN' 
  3.  -> WHERE customer_id = 1; 
  4. Query OK, 1 row affected (0.11 sec) 
  5. Rows matched: 1 Changed: 1 Warnings: 0 

如你所見,該語句修改了一行,但我們還是檢查一下基礎(chǔ)customer表以驗證我們的更新:

  1. mysql> SELECT first_name, last_name, email 
  2.  -> FROM customer 
  3.  -> WHERE customer_id = 1; 
  4. +------------+-------------+-------------------------------+ 
  5. | first_name | last_name | email | 
  6. +------------+-------------+-------------------------------+ 
  7. | MARY | SMITH-ALLEN | MARY.SMITH@sakilacustomer.org | 
  8. +------------+-------------+-------------------------------+ 
  9. 1 row in set (0.00 sec) 

雖然可以以這種方式修改視圖中的大多數(shù)列,但卻無法修改email列,因為它是從表達式派生的:

  1. mysql> UPDATE customer_vw 
  2.  -> SET email = 'MARY.SMITH-ALLEN@sakilacustomer.org' 
  3.  -> WHERE customer_id = 1; 
  4. ERROR 1348 (HY000): Column 'email' is not updatable 

這種情況可能并不是一件壞事,因為創(chuàng)建視圖的主要原因是為了隱藏電子郵件地址。

如果要使用customer_vw視圖插入數(shù)據(jù),那就不太合適了,因為包含派生列的視圖不能用于插入數(shù)據(jù),即使派生列未包含在語句中。例如,下一條語句嘗試使用customer_vw視圖填充customer_id、first_name和last_name列:

  1. mysql> INSERT INTO customer_vw  
  2.  -> (customer_id,  
  3.  -> first_name,  
  4.  -> last_name)  
  5.  -> VALUES (99999,'ROBERT','SIMPSON');  
  6. ERROR 1471 (HY000): The target table customer_vw of the INSERT is not insertable-into 

現(xiàn)在你已經(jīng)了解了簡單視圖的局限性,下一節(jié)將演示如何使用視圖連接多個表。

3.2 更新復(fù)雜視圖

雖然單表視圖確實很常見,但你遇到的許多視圖都會在基礎(chǔ)查詢的from子句中包含多個表。例如,下一個視圖連接customer、address、city和country表,以便可以方便地查詢客戶的所有數(shù)據(jù):

  1. CREATE VIEW customer_details  
  2. AS  
  3. SELECT c.customer_id,  
  4.  c.store_id,  
  5.  c.first_name,  
  6.  c.last_name,  
  7.  c.address_id,  
  8.  c.active,  
  9.  c.create_date,  
  10.  a.address,  
  11.  ct.city,  
  12.  cn.country,  
  13.  a.postal_code  
  14. FROM customer c  
  15.  INNER JOIN address a  
  16.  ON c.address_id = a.address_id  
  17.  INNER JOIN city ct  
  18.  ON a.city_id = ct.city_id  
  19.  INNER JOIN country cn  
  20.  ON ct.country_id = cn.country_id; 

你可以使用此視圖更新customer或address表中的數(shù)據(jù),如下語句所示:

  1. mysql> UPDATE customer_details  
  2.  -> SET last_name = 'SMITH-ALLEN', active = 0  
  3.  -> WHERE customer_id = 1;  
  4. Query OK, 1 row affected (0.10 sec)  
  5. Rows matched: 1 Changed: 1 Warnings: 0  
  6. mysql> UPDATE customer_details  
  7.  -> SET address = '999 Mockingbird Lane'  
  8.  -> WHERE customer_id = 1;  
  9. Query OK, 1 row affected (0.06 sec)  
  10. Rows matched: 1 Changed: 1 Warnings: 0 

第一個語句修改customer.last_name以及customer.active列,而第二條語句修改address.address列。你可能想知道,如果嘗試在一條語句中更新兩個表中的列,會發(fā)生什么情況,下面讓我們看看:

  1. mysql> UPDATE customer_details 
  2.  -> SET last_name = 'SMITH-ALLEN'
  3.  -> active = 0, 
  4.  -> address = '999 Mockingbird Lane' 
  5.  -> WHERE customer_id = 1; 
  6. ERROR 1393 (HY000): Can not modify more than one base table  
  7.  through a join view 'sakila.customer_details' 

如你所見,使用單個語句中修改兩個基礎(chǔ)表是不可行的,只能分別修改。接下來讓我們嘗試在兩個表中插入一些新客戶(customer_id=9998和9999)的數(shù)據(jù):

  1. mysql> INSERT INTO customer_details 
  2.  -> (customer_id, store_id, first_name, last_name, 
  3.  -> address_id, active, create_date) 
  4.  -> VALUES (9998, 1, 'BRIAN''SALAZAR', 5, 1, now()); 
  5. Query OK, 1 row affected (0.23 sec) 

此語句只填充customer表中的列并且工作正常。下面看一下如果擴展列列表以同時包含address表中的列會發(fā)生什么:

  1. mysql> INSERT INTO customer_details  
  2.  -> (customer_id, store_id, first_name, last_name,  
  3.  -> address_id, active, create_date, address)  
  4.  -> VALUES (9999, 2, 'THOMAS''BISHOP', 7, 1, now(),  
  5.  -> '999 Mockingbird Lane');  
  6. ERROR 1393 (HY000): Can not modify more than one base table   
  7.  through a join view 'sakila.customer_details' 

此版本的語句包含跨兩個不同表的列,結(jié)果拋出異常。為了通過復(fù)雜視圖插入數(shù)據(jù),你需要知道每個列的來源。由于創(chuàng)建視圖的目的是向終端用戶隱藏復(fù)雜性,因此如果用戶要熟悉視圖定義,那么這似乎就達不到隱藏復(fù)雜性的目的了。

注意

 

Oracle Database和SQL Server也允許通過視圖插入和更新數(shù)據(jù),但與MySQL一樣有許多限制。如果你打算愿意編寫一些PL/SQL或Transact-SQL語句,那么可以使用名為替代觸發(fā)器(instead-of triggers)的功能,它允許你截取視圖的insert、update和delete語句,并編寫自定義代碼將這些更改包括在內(nèi)。如果沒有這種類型的功能,通常會有太多的限制,使得通過視圖進行更新成為非平凡應(yīng)用程序中的可行策略。

 

責(zé)任編輯:武曉燕 來源: 數(shù)據(jù)與智能
相關(guān)推薦

2020-08-04 10:50:44

數(shù)據(jù)分析技術(shù)IT

2021-06-30 20:49:15

SQL子查詢數(shù)據(jù)

2023-09-18 07:23:45

2024-01-10 08:22:38

物聯(lián)網(wǎng)數(shù)據(jù)分析建模人工智能

2015-08-19 13:50:19

數(shù)據(jù)分析

2017-01-23 13:34:44

2017-04-28 08:13:08

大數(shù)據(jù)框架HDFS

2024-01-09 13:58:22

PandasPython數(shù)據(jù)分析

2015-08-27 09:41:01

app推廣appstore

2019-06-06 14:08:37

數(shù)據(jù)倉庫數(shù)據(jù)分析數(shù)據(jù)報表

2015-08-14 10:28:09

大數(shù)據(jù)

2023-10-29 18:15:41

數(shù)據(jù)分析趨勢分析法漏斗分析法

2020-11-18 09:33:03

數(shù)據(jù)分析業(yè)務(wù)問題

2020-12-24 13:32:31

大數(shù)據(jù)數(shù)據(jù)分析SQL

2022-02-06 11:35:53

SQL數(shù)據(jù)函數(shù)

2025-04-17 02:00:00

數(shù)據(jù)分析SQL大數(shù)據(jù)

2020-07-26 19:19:46

SQL數(shù)據(jù)庫工具

2012-06-05 09:59:00

2011-06-21 16:58:09

外鏈

2012-06-07 09:51:20

點贊
收藏

51CTO技術(shù)棧公眾號

亚洲涩涩av| av漫画网站在线观看| 欧美a一区二区| 日韩专区在线播放| 91视频福利网| 蜜桃麻豆影像在线观看| 亚洲国产高清在线观看视频| 国产区亚洲区欧美区| 久久午夜无码鲁丝片午夜精品| 精品欧美午夜寂寞影院| 欧美三级在线看| 久久久久久久久久久综合| 欧美女优在线| 国产精品1区2区3区在线观看| 欧美一级bbbbb性bbbb喷潮片| 国产精品视频在| 粉嫩的18在线观看极品精品| 色婷婷综合久久久久中文一区二区 | 日韩av影视| 亚洲国产一二三区| 久久激情中文| 久久久久久国产| 手机av在线看| 欧美丝袜激情| 精品在线观看国产| 久久久久亚洲AV成人网人人小说| 国产精品美女午夜爽爽| 精品女同一区二区三区在线播放| 神马午夜伦理影院| 日本在线播放| 中文字幕免费观看一区| 九九九九久久久久| 国模人体一区二区| 国产麻豆精品95视频| 国产精品人成电影| 天天干天天操天天操| 日韩视频在线一区二区三区| 欧美成人午夜激情在线| 久久久99999| 成人在线国产| 国产一区二区三区四区福利| av网站免费在线播放| 国产精品毛片视频| 精品日韩在线观看| 中文字幕一二三| 麻豆精品在线| 日韩一级黄色片| 天天av天天操| 国色天香久久精品国产一区| 91精品国产综合久久久蜜臀图片| 欧美伦理片在线观看| 香蕉成人影院| 欧美私模裸体表演在线观看| 三年中国国语在线播放免费| 日韩视频网站在线观看| 日韩欧美第一页| 白嫩少妇丰满一区二区| 日韩久久一区二区三区| 欧洲一区二区av| 久久99999| 全球中文成人在线| 欧美一区二区三区视频在线| 亚洲自拍第三页| 中文字幕日韩在线| 欧美精品一区二区三区蜜臀| 亚洲图片综合网| 一区二区导航| 中文字幕一精品亚洲无线一区 | 亚洲欧美综合网| 日本女人高潮视频| 欧美卡一卡二| 午夜精品成人在线视频| 日韩欧美精品在线观看视频| 欧美黑人粗大| 欧美亚一区二区| 五月天开心婷婷| 7777精品| 精品偷拍一区二区三区在线看| 丰满少妇一区二区| 国产精品99久久久久久动医院| 久久国产精品久久久| 日本一级黄色录像| 热久久一区二区| 91黄色精品| 亚洲 小说区 图片区 都市| 国产色综合久久| 成人短视频在线看| 三级在线看中文字幕完整版| 欧美三级蜜桃2在线观看| 中文字幕av一区二区三区人妻少妇| 国产精品xxx在线观看| 亚洲人永久免费| 日本精品人妻无码77777| 在线亚洲激情| 成人中心免费视频| 天堂av在线资源| 国产精品国产三级国产有无不卡| 日本免费a视频| 78精品国产综合久久香蕉| 日韩视频一区二区在线观看| 中文字幕av网址| 欧美日本一区二区高清播放视频| 欧美亚洲成人网| 国产高清免费观看| 国产午夜亚洲精品理论片色戒 | 肉体视频在线| 欧美在线观看视频一区二区| 亚洲麻豆一区二区三区| 日韩欧美高清在线播放| 久久人91精品久久久久久不卡| 久久久久久无码精品大片| 国产成人av一区二区三区在线 | 亚洲精品成人无码| 国语精品一区| 国产欧美在线看| 国产三级视频在线看| 亚洲成人综合网站| 亚欧精品在线视频| 久久蜜桃av| 日本高清不卡的在线| 性中国xxx极品hd| 中文字幕亚洲综合久久菠萝蜜| 91视频最新入口| 懂色av一区二区| 欧美日韩国产999| 国产精品久久免费| 国产精品伦一区| 国产xxxxx视频| 天堂成人娱乐在线视频免费播放网站 | 精品一区二区三区蜜桃在线| 亚洲理论在线| 国产精品.com| 欧美大片黄色| 欧美一区二区网站| 麻豆天美蜜桃91| 激情偷乱视频一区二区三区| 午夜欧美性电影| 巨胸喷奶水www久久久| 亚洲视频综合网| 好吊色在线视频| 久久久久久夜精品精品免费| 日韩欧美一区二| 秋霞影视一区二区三区| 国内外成人免费激情在线视频| 亚洲精品国产av| 亚洲在线观看免费视频| 一区二区在线免费观看视频| 欧美+亚洲+精品+三区| 96sao精品视频在线观看| 97超碰资源站在线观看| 欧美一二三四区在线| 国产午夜手机精彩视频| 国产黄色成人av| 欧洲精品在线播放| 国产精品对白久久久久粗| 久久久免费电影| 丰满少妇被猛烈进入| 午夜一区二区三区视频| 国产成人无码一区二区在线观看| 免费日韩视频| 午夜精品福利一区二区| 国产精品亚洲综合在线观看| 欧美xxxx做受欧美.88| 亚洲成人精品女人久久久| 亚洲国产精品久久艾草纯爱| 日本一级片在线播放| 久久xxxx精品视频| 亚洲成色www久久网站| 综合久久av| 蜜臀久久99精品久久久久久宅男| 亚洲精品国产suv一区| 精品久久久一区二区| 最近中文字幕在线mv视频在线 | 国产偷人妻精品一区| 日韩专区一卡二卡| 亚洲午夜精品久久| 88久久精品| 97在线观看视频| av中文在线| 日韩欧美国产1| 天天操夜夜操视频| 综合色天天鬼久久鬼色| 成人免费看片载| 久久视频一区| 欧美性受xxxx黑人猛交88| 国产精品qvod| 国产日韩av在线播放| 国产丝袜视频在线播放| 亚洲欧洲一区二区三区久久| 国产精品无码久久av| 午夜视频在线观看一区| 色婷婷国产精品免| 波多野结衣亚洲一区| 国产精品视频分类| 亚洲欧洲午夜| 中文字幕久久一区| 网曝91综合精品门事件在线| 91久久精品视频| 亚洲伊人av| 欧美高清视频免费观看| 国产一二三区在线| 亚洲第一视频网站| 国产又粗又猛视频| 日本韩国一区二区三区| 久久综合色综合| 国产精品二三区| 蜜臀av一区二区三区有限公司| 精品系列免费在线观看| 免费毛片小视频| 亚洲大胆视频| 最新av网址在线观看| 国产欧美一区二区精品久久久| 国产91社区| 亚洲一区av| 国产精品福利观看| 自拍网站在线观看| 欧美激情高清视频| 超碰个人在线| 深夜福利亚洲导航| 不卡在线视频| 亚洲女人天堂成人av在线| 欧美性猛交 xxxx| 欧美一区二区在线免费播放| 在线免费看av片| 色噜噜久久综合| 好吊妞视频一区二区三区| 亚洲精品日日夜夜| 日本一级特级毛片视频| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 欧美三级日本三级| 国产精品成人免费| 人妻无码一区二区三区免费| 国产亚洲欧美在线| 亚洲最大成人网站| 久久久久久久久久久久久久久99| 久久久午夜精品福利内容| 成人午夜av电影| 久久精品aⅴ无码中文字字幕重口| 国产一区三区三区| 污污视频网站在线| 精品无码三级在线观看视频 | 免费av网站在线| 欧美午夜精品久久久久久浪潮| 久久精品国产亚洲AV无码麻豆| 亚洲精品ww久久久久久p站| 国产女人18水真多毛片18精品| 国产精品电影一区二区三区| 午夜成人亚洲理伦片在线观看| 国产欧美一区二区三区鸳鸯浴| 熟女高潮一区二区三区| 久久久777精品电影网影网| 成人免费无遮挡无码黄漫视频| 久久在线免费观看| 久操视频在线观看免费| 国产精品人妖ts系列视频| 在线视频这里只有精品| 亚洲欧美日韩综合aⅴ视频| 免费中文字幕在线| 亚洲国产乱码最新视频| 日干夜干天天干| 日韩欧美亚洲综合| 亚洲 国产 日韩 欧美| 欧美日韩精品欧美日韩精品| 国产精品无码天天爽视频| 日韩免费性生活视频播放| 粉嫩小泬无遮挡久久久久久| 亚洲精品美女久久| 高清性色生活片在线观看| 久久精品99无色码中文字幕| 污视频网站在线免费| 4438全国亚洲精品在线观看视频| 日韩欧美少妇| 91精品免费视频| 欧美国产不卡| 视频在线99re| 在线成人激情| 春日野结衣av| 国产乱码精品一区二区三区av | 视频一区 中文字幕| 亚洲欧美中文日韩在线| 日本在线人成| 久久久亚洲福利精品午夜| 欧美成a人片在线观看久| 91精品久久香蕉国产线看观看| 加勒比久久高清| 亚洲激情图片| 一区在线播放| 日本不卡一区在线| 成人av网站在线| 999福利视频| 五月激情综合婷婷| 一区二区三区黄| 日韩黄色高清视频| 国产乱色在线观看| 欧美最近摘花xxxx摘花| 91成人精品观看| 欧美精品中文字幕一区二区| 91精品国产91久久久久久密臀| 免费看一级大黄情大片| 激情综合色综合久久| 精品国产av无码| 亚洲一区二区欧美日韩| 最新中文字幕第一页| 亚洲国产精品中文| 黄色网在线播放| 国产精品99久久久久久白浆小说| 亚洲国产精品免费视频| 日韩视频在线观看国产| 红桃视频欧美| 亚洲一二区在线观看| 久久精品在线免费观看| 国产大片中文字幕| 4438成人网| 成人在线免费观看| 2019中文字幕全在线观看| 日韩中文字幕无砖| 亚洲区一区二区三区| 久久久精品五月天| 亚洲熟女乱综合一区二区三区| 亚洲码国产岛国毛片在线| 中文无码av一区二区三区| 亚洲欧洲美洲在线综合| 国产传媒在线观看| 国产精品久久亚洲7777| 欧美日本一区二区视频在线观看 | 久久夜色精品国产噜噜av小说| 中文字幕一区二区中文字幕| 首页国产欧美久久| av直播在线观看| 精品美女国产在线| 丰满肉肉bbwwbbww| 久久久久国产一区二区三区| 国产精品视频一区二区三区综合 | 欧美一区二区三区免费大片 | 色香蕉在线视频| 欧美—级高清免费播放| 婷婷视频一区二区三区| 色婷婷777777仙踪林| 国产一区在线精品| 欧美被狂躁喷白浆精品| 日韩欧美国产1| 精灵使的剑舞无删减版在线观看| 亚洲最大福利网| 欧美色123| 无码人妻一区二区三区免费n鬼沢| 伊人开心综合网| 亚洲国产999| 午夜免费在线观看精品视频| 欧美人与动xxxxz0oz| 波多野结衣乳巨码无在线| 91丨九色丨黑人外教| 神马久久久久久久| 在线观看久久久久久| 丰满少妇一区| 中国 免费 av| 床上的激情91.| 91精品国产乱码久久久张津瑜| 日韩成人网免费视频| 亚洲成人激情社区| 婷婷精品国产一区二区三区日韩| 久久精品国产在热久久| 四虎精品免费视频| 精品国产一区a| 无码小电影在线观看网站免费| 欧美日韩国产不卡在线看| 奇米色一区二区| 免费中文字幕在线观看| 日韩精品极品视频| 国产综合色在线观看| 日韩人妻精品一区二区三区| 成人av电影免费在线播放| 免费黄色网址在线| 日韩一区二区精品视频| youjizz亚洲| 黄色一级二级三级| 亚洲欧美日韩小说| 天天色综合av| 国产日韩欧美电影在线观看| 欧美日韩1区| 免费人成又黄又爽又色| 制服丝袜一区二区三区| а√天堂中文在线资源8| 性欧美videosex高清少妇| 国产成人免费视| 精品91久久久| 久久久91精品国产一区不卡| 林ゆな中文字幕一区二区| 最近中文字幕一区二区| 亚洲国产精品久久艾草纯爱| 992tv免费直播在线观看| 国产91一区二区三区| 男女性色大片免费观看一区二区 | a资源在线观看| 欧美大片国产精品| 成人福利一区二区| 又大又硬又爽免费视频| 国产精品视频九色porn| 日本久久一级片| 成人精品在线视频| 久久九九免费|