精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

国产精品福利无圣光在线一区| 日韩视频在线永久播放| 亚洲精品日韩成人| 国产伦精品一区二区三区免.费| 在线国产一区| 亚洲91在线| 1区2区3区欧美| 狠狠干一区二区| 亚洲图片欧美在线| 国产一区二区三区久久久久久久久| 国产一区二区激情| 国产精品果冻传媒| abab456成人免费网址| 一区二区高清在线| 亚洲高清乱码| 神宫寺奈绪一区二区三区| 老牛影视一区二区三区| 九九久久综合网站| 热99在线视频| 亚洲第一区第二区第三区| 波多野结衣中文字幕久久| 国产精品素人视频| 精品视频一区在线| 亚洲av色香蕉一区二区三区| 三级欧美韩日大片在线看| 欧美高清视频在线| 国产免费嫩草影院| 久久av中文| 亚洲成人av中文字幕| caoporm在线视频| 欧美成人精品三级网站| 午夜精品福利在线| 男人天堂网站在线| 免费网站免费进入在线| 久久久国产精品午夜一区ai换脸| 成人蜜桃视频| 国产av无码专区亚洲av| 捆绑变态av一区二区三区 | 在线午夜影院| 中文字幕欧美国产| 日本成人黄色| 日本国产在线| 91免费看视频| 极品校花啪啪激情久久| 朝桐光av在线一区二区三区| 国产一区二区中文字幕| 91在线高清视频| 一级全黄少妇性色生活片| 青草国产精品久久久久久| 日本不卡高字幕在线2019| 国产精品人人人人| 麻豆91精品| 日韩av日韩在线观看| 台湾佬中文在线| 久久久久欧美精品| 国产精品久久久久aaaa九色| 中文字幕 自拍偷拍| 日本不卡123| 国产美女久久精品| 国产尤物在线观看| 国产福利精品导航| 国产精品加勒比| 天天干天天草天天射| av一二三不卡影片| 欧美日韩在线高清| 尤物网在线观看| 亚洲日本一区二区| 乱熟女高潮一区二区在线| 国产91足控脚交在线观看| 亚洲国产精品精华液网站| 六月婷婷在线视频| 毛片免费看不卡网站| 欧美无砖砖区免费| 三日本三级少妇三级99| 成人h动漫精品一区二区器材| 亚洲第一精品夜夜躁人人躁| www.色多多| 日本精品三区| 九九九久久久久久| 日韩精品在线免费视频| 蜜臀久久99精品久久久久久9| 91精品国产综合久久久久久蜜臀| 国产福利第一视频| 26uuu精品一区二区三区四区在线| 日本一区高清不卡| 69xxx在线| 欧美性生交大片免网| www.涩涩涩| 盗摄牛牛av影视一区二区| 亚洲欧美国内爽妇网| 四虎影院中文字幕| 国产欧美日韩亚洲一区二区三区| 国产精品夜色7777狼人| 黑人精品一区二区三区| 中文一区在线播放| 亚洲国产成人精品无码区99| 精品网站在线| 精品久久99ma| 美国美女黄色片| 亚洲国产高清一区二区三区| 国产精品一区二区三区久久久| 好吊视频一二三区| 国产精品久久久久久户外露出 | 欧美另类网站| 在线视频国产区| 在线观看亚洲成人| 国产婷婷在线观看| 91青青国产在线观看精品| 97视频在线看| 国产精品一区二区黑人巨大| 久久久久综合网| 99久久免费观看| 久久久精品一区二区毛片免费看| 日韩精品中文字幕在线观看| 欧美高清视频一区二区三区| 奇米影视一区二区三区小说| 久久久影院一区二区三区| av网站免费在线观看| 欧美手机在线视频| 人妻精品久久久久中文字幕| 伊人久久亚洲影院| 97超级碰碰| 国产精品刘玥久久一区| 精品视频一区二区三区免费| 精品人妻一区二区三区日产乱码卜| 91精品国产91久久久久久密臀 | 在线播放成人av| 久久蜜桃一区二区| 国产精品日韩三级| 国产一区二区视频在线看| 日韩中文视频免费在线观看| 午夜精品一区二| 91视频在线看| 成人午夜免费在线| 99国产精品久久一区二区三区| 久久中文字幕在线| 一区二区日韩在线观看| 国产精品网站导航| 久久久国产欧美| 免费一区二区三区视频导航| 97国产精品人人爽人人做| 刘亦菲毛片一区二区三区| 亚洲综合免费观看高清完整版| 中文字幕丰满乱码| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 91精品国产自产在线观看永久∴| 国产精品成人v| 黄色片在线播放| 欧美在线小视频| 亚洲性猛交xxxx乱大交| 久久视频一区| 天天爽天天狠久久久| www.26天天久久天堂| 亚洲一级黄色av| 国产偷人爽久久久久久老妇app| 国产人久久人人人人爽| 人人干人人干人人| 外国成人免费视频| 亚洲影院污污.| 日本高清在线观看| 亚洲国产私拍精品国模在线观看| 日本少妇性高潮| 91老师片黄在线观看| 亚洲国产精品毛片av不卡在线| 国产欧美日韩精品一区二区免费| 国产精品高精视频免费| 日本三级视频在线观看| 日韩一区二区免费电影| 日韩免费黄色片| 久久综合av免费| 邪恶网站在线观看| 午夜日韩在线| 老牛影视免费一区二区| 亚洲精品粉嫩美女一区| 久久久成人av| 色综合免费视频| 日本福利一区二区| 国精产品久拍自产在线网站| 成人午夜激情视频| aaa毛片在线观看| 亚洲国产成人精品女人| 精品九九九九| 精品176极品一区| 欧美精品18videosex性欧美| 黄色软件在线| 欧美大胆一级视频| 成人a v视频| 夜夜精品浪潮av一区二区三区| 国产精品1000部啪视频| 极品尤物av久久免费看| 热99这里只有精品| 天堂美国久久| 久久久www免费人成黑人精品| 国精品产品一区| 欧美极品美女视频网站在线观看免费| 免费在线黄色网址| 欧美一区二区私人影院日本| 99精品视频99| 亚洲色图制服丝袜| 亚洲天堂岛国片| 成人国产精品免费观看视频| 亚洲黄色小视频在线观看| 亚洲伦理精品| 日韩人妻精品一区二区三区| 怕怕欧美视频免费大全| av免费观看久久| 国产第一精品| 国产69久久精品成人看| 性直播体位视频在线观看| 在线视频精品一| 午夜激情在线视频| 日韩免费视频一区| 这里只有精品9| 色综合天天综合| 国产精品50页| 亚洲理论在线观看| 99热这里只有精品4| 久久免费国产精品| 可以直接看的无码av| 成人免费看黄yyy456| 中文字幕第38页| 久久久国产精品一区二区中文| 91午夜在线观看| 亚洲综合色站| 在线观看日本一区| 欧美一区二区三区高清视频| 久久精品成人一区二区三区蜜臀| 亚洲成人偷拍| 91精品国产一区二区三区动漫| 国产一区二区三区影视| 青青久久av北条麻妃黑人| 蜜桃视频m3u8在线观看| 97福利一区二区| 2019中文字幕在线电影免费| 久久99精品国产99久久6尤物| 成人在线视频亚洲| 久久久久www| 国产在线观看av| 久久亚洲精品一区| 福利视频在线| 欧美成人精品三级在线观看| 成人免费高清| 欧美成人免费全部| 自由的xxxx在线视频| 久久99国产综合精品女同| 三区四区在线观看| 亚洲成人黄色| 91久久久久久| 日韩成人一区| 91午夜理伦私人影院| 国产精品1区在线| 亚洲自拍偷拍一区| 97成人在线| 国产日韩欧美精品| 日韩欧美中文字幕电影| 欧美xxxx黑人又粗又长精品| 沈樵精品国产成av片| 日本在线播放一区| 久久影院100000精品| 一区二区三区四区视频在线| 久久精品免费一区二区三区| 欧美 国产 精品| 亚洲精品一二| 欧美成人黑人猛交| 美女网站一区二区| 国产又粗又猛又爽又黄| 成人小视频免费在线观看| 国产肉体xxxx裸体784大胆| 久久网站热最新地址| 99久久99久久精品免费| 亚洲欧美成人一区二区三区| 一区二区三区免费高清视频| 欧美午夜宅男影院在线观看| 懂色av蜜臀av粉嫩av喷吹| 制服丝袜亚洲色图| 噜噜噜久久,亚洲精品国产品| 亚洲欧美国产精品专区久久| 又爽又大又黄a级毛片在线视频| 久久99热精品这里久久精品| 自拍偷拍欧美视频| 成人免费淫片aa视频免费| av一级亚洲| 日韩精品久久一区二区三区| 在线精品国产| 国产精品无码av无码| 国内成人自拍视频| 国产麻豆天美果冻无码视频| 国产精品欧美一区喷水| 久草视频在线免费看| 色哟哟一区二区在线观看| 国产精品伦理一区| 日韩精品视频观看| 黄色av网站在线播放| 日本成人激情视频| 涩涩屋成人免费视频软件| 欧美主播一区二区三区美女 久久精品人 | 羞羞的网站在线观看| 日韩av电影国产| 亚洲日本一区二区三区在线| 日本一区二区三区精品视频| 欧美阿v一级看视频| 一区二区三区视频在线观看免费| 成人激情av网| 日韩国产第一页| 日韩欧美在线一区| 亚洲精品成人电影| 色婷婷综合久久久久| 成人免费影院| 国产成人精品免费视频大全最热| 日韩激情免费| 91av在线免费播放| 成人avav在线| 一区二区成人免费视频| 欧美日韩黄色影视| 欧洲天堂在线观看| 91精品国产99久久久久久| 精品欧美视频| 一区二区三区视频| 久久久精品日韩| 99久久免费看精品国产一区| 亚洲女同女同女同女同女同69| 波多野结衣视频网址| 精品在线观看国产| 免费在线小视频| 国产一区二区在线网站| 激情欧美一区| 极品白嫩的小少妇| 亚洲综合男人的天堂| 精品国产无码一区二区三区| 久久亚洲精品国产亚洲老地址| 久久人体av| 亚洲一卡二卡三卡四卡无卡网站在线看 | 亚洲精品视频一二三区| 亚洲国产精品影视| 久久精品国内一区二区三区| 国产黄色大片免费看| 在线观看国产91| 成人免费在线视频网| 国产成人91久久精品| 国内黄色精品| 91在线视频观看免费| 欧美激情一区二区三区在线| 午夜一区二区三区四区| 国产午夜精品视频| 成人精品国产亚洲| 自拍偷拍亚洲色图欧美| 精品在线一区二区三区| 国产美女高潮视频| 欧美一区二区三区免费观看视频| av在线影院| 国产美女99p| 国产一级一区二区| 日本xxxxxxxxx18| 欧美日韩黄色一区二区| 麻豆av免费在线观看| 97人人做人人人难人人做| 亚洲国产免费看| 无码熟妇人妻av| 欧洲视频一区二区| 快射视频在线观看| 国产精品国产三级国产专区53 | 亚洲欧洲精品一区二区三区| 国产三级第一页| 国产69精品99久久久久久宅男| 欧美三级自拍| 色悠悠久久综合网| 亚洲精品久久久蜜桃| 亚洲 欧美 激情 另类| 日本国产一区二区三区| 久久国产亚洲| 农村末发育av片一区二区| 午夜欧美在线一二页| 国产女人在线视频| 成人深夜直播免费观看| 亚洲激情亚洲| 自拍偷拍你懂的| 日韩美女视频一区二区在线观看| 激情国产在线| 亚洲一区二区三区欧美| 国产黄色精品视频| 中文字幕黄色片| 久热精品视频在线观看| 欧美xxxx在线| 亚洲欧美日韩精品一区| 亚洲成人精品在线观看| 欧美三级黄网| 精品国产区在线| 精品亚洲成a人| 九一国产在线观看| 久久福利视频网| 美女少妇全过程你懂的久久| www.久久久久久久久久久| 无吗不卡中文字幕| 毛片在线看片| 久久精品一区二区三区不卡免费视频 | 国产中文精品久高清在线不| 国产999免费视频| 日本道精品一区二区三区| 欧美1—12sexvideos| 亚洲在线色站|