国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

細(xì)說SQL Server中的視圖

2024-08-31 01:03:51
字體:
供稿:網(wǎng)友
本文詳解介紹了SQL Server中如何創(chuàng)建視圖,刷新和更新視圖,加密和索引視圖等方法,希望對大家有所幫助。
 

1,什么是視圖?

2,為什么要用視圖;

3,視圖中的ORDER BY;

4,刷新視圖;

5,更新視圖;

6,視圖選項;

7,索引視圖;

1.什么是視圖

  視圖是由一個查詢所定義的虛擬表,它與物理表不同的是,視圖中的數(shù)據(jù)沒有物理表現(xiàn)形式,除非你為其創(chuàng)建一個索引;如果查詢一個沒有索引的視圖,Sql Server實際訪問的是基礎(chǔ)表。

  如果你要創(chuàng)建一個視圖,為其指定一個名稱和查詢即可。Sql Server只保存視圖的元數(shù)據(jù),用戶描述這個對象,以及它所包含的列,安全,依賴等。當(dāng)你查詢視圖時,無論是獲取數(shù)據(jù)還是更新數(shù)據(jù),Sql server都用視圖的定義來訪問基礎(chǔ)表;

  視圖在我們?nèi)粘2僮饕舶缪葜S多重要的角色,比如可以利用視圖訪問經(jīng)過篩選和處理的數(shù)據(jù),而不是直接訪問基礎(chǔ)表,以及在一定程度上也保護(hù)了基礎(chǔ)表。

我們在創(chuàng)建視圖的時候,也要遵守三個規(guī)則:

不能在視圖定義中指定ORDER BY ,除非定義中包含Top或For Xml 說明;
所有的列必須有列名;
這些所有的列名必須唯一;

  對于視圖表中在沒有top或for xml說明的情況下,不能有Order by 語句,這是因為視圖被認(rèn)為是一個表,表是一個邏輯的實體,它的行是沒有順序的。視圖中所有列必須有列名,且唯一的情況我想大家都理解;

下面的sql語句表示創(chuàng)建一個簡單的視圖:

 

復(fù)制代碼代碼如下:
CREATE VIEW dbo.V1
AS
SELECT CustomerID,CompanyName FROM Customers 
WHERE EXISTS(SELECT * FROM Orders WHERE Customers.CustomerID = Orders.CustomerID)

 

2.為什么要使用視圖(更新)

  SqlServer既然給我們提供這樣的對象,就一定有它的作用。而我們在使用視圖上,要么用的過多,要么用的不夠,所以一部分人建議不要用視圖,而一部分人又建議少用。那我們聽誰的呢?

  其實我們要是掌握了用視圖的目的,就能在正確的地方,用正確的視圖;那么視圖能給我們解決什么問題呢?

1),為最終用戶減少數(shù)據(jù)庫呈現(xiàn)的復(fù)雜性。客戶端只要對視圖寫簡單的代碼,就能返回我所需要的數(shù)據(jù),一些復(fù)雜的邏輯操作,放在了視圖中來完成;

2),防止敏感的列被選中,同時仍然提供對其他重要數(shù)據(jù)的訪問;

3),對視圖添加一些額外的索引,來提高查詢的效率;

  視圖其實沒有改變?nèi)魏问虑椋皇菍υL問的數(shù)據(jù)進(jìn)行了某種形式的篩選。考慮一下視圖的作用,你應(yīng)該能看到視圖的概念如何為缺乏經(jīng)驗的用戶簡化數(shù)據(jù)(只顯示他們關(guān)心的數(shù)據(jù)),或者不給予用戶訪問基礎(chǔ)表的
權(quán)利,但授予他們訪問不包含敏感數(shù)據(jù)視圖的權(quán)力,從而提前隱藏敏感數(shù)據(jù)。

  要知道,在默認(rèn)的情況下,視圖沒有做什么特殊的事情。視圖就好象一個查詢那樣從命令行運行(這里不存在任何形式的預(yù)先優(yōu)化),這意味著在數(shù)據(jù)請求和將被交付的數(shù)據(jù)之間多加了一層開銷。這表明視圖絕不可能像
只是直接運行底層SELECT語句那樣快。不過,視圖存在有一個原因--這就是它的安全性或為用戶所做的簡化,在你的需要和開銷之間權(quán)衡,找到最適合特定情況的解決方案。

3.視圖中的ORDER BY

視圖表示一個邏輯實體,它與表非常類似;

如果我們在上面的創(chuàng)建的sql語句中加一個Order BY 語句,看看有什么效果:

 

復(fù)制代碼代碼如下:
ALTER VIEW dbo.V1
AS 
SELECT CustomerID,CompanyName FROM Customers 
WHERE EXISTS(SELECT * FROM Orders WHERE Customers.CustomerID = Orders.CustomerID)  
ORDER BY CompanyName

 

運行該語句將會失敗,回收到以下的提示:

Msg 1033, Level 15, State 1, Procedure V1, Line 5
除非另外還指定了 TOP 或 FOR XML,否則,ORDER BY 子句在視圖、內(nèi)聯(lián)函數(shù)、派生表、子查詢和公用表表達(dá)式中無效。

根據(jù)提示,ORDER By 也不是不能用,只有指定了Top或for xml語句后,ORDER BY 才能使用,如:

 

復(fù)制代碼代碼如下:
ALTER VIEW dbo.V1
AS 
SELECT TOP(10) CustomerID,CompanyName FROM Customers 
WHERE EXISTS(SELECT * FROM Orders WHERE Customers.CustomerID = Orders.CustomerID)  
ORDER BY CompanyName

 

但是,并不建議在視圖中使用ORDER BY ,這是因為視圖表示一個表,而對于表來說,是不會有排序的;所以建議在查詢視圖的時候,用ORDER BY;

SQL Server2005聯(lián)機(jī)叢書有一段這樣的描述:“在視圖、內(nèi)聯(lián)函數(shù)、派生表或子查詢的定義中使用ORDER BY 字句,子句只能用戶確定TOP子句返回的行。ORDER BY 不保證在查詢這些構(gòu)造時得到有序結(jié)果,除非在查詢本省也指定了ORDER BY.”

4.刷新視圖

我在上面說過,視圖會保存元數(shù)據(jù),列,安全,以及依賴等信息,如果我們把基礎(chǔ)表的架構(gòu)更改了,并不會直接反映到視圖上來;更改架構(gòu)后,使用sp_refreshview存儲過程刷新視圖的元數(shù)據(jù)是一個好習(xí)慣;

比如我們創(chuàng)建了一個表T1和一個T1的視圖V1,然后更改T1,再看V1的結(jié)果:

首先創(chuàng)建表T1:

 

復(fù)制代碼代碼如下:
IF OBJECT_ID('T1') IS NOT NULL
DROP TABLE T1
CREATE TABLE T1(col1 INT,col2 INT)
INSERT INTO T1(col1,col2) VALUES(1,2)
GO

 

然后創(chuàng)建T1的視圖V1:

 

復(fù)制代碼代碼如下:
CREATE VIEW V1
AS 
SELECT * FROM T1

 

在現(xiàn)實實踐中,要避免在視圖中的SELECT語句中使用*,在這只是演示。如果你查詢視圖V1就會出現(xiàn)以下結(jié)果:
SQLServer

接下來,我們對表T1添加一列col3:

 

復(fù)制代碼代碼如下:
ALTER TABLE T1 ADD col3 INT

 

然后再次查詢視圖V1,你想這時的結(jié)果是三列呢,還是而列呢?答案是二列。T1架構(gòu)的改變,并沒有影響到視圖的元數(shù)據(jù)中,這時候,如果我們要刷新一下視圖V1,我們就可以用:EXEC sp_refreshview V1 命令, 再次查詢,V1的結(jié)果就是三列了。

5.更新視圖

  視圖是一個虛擬表,我們在查詢視圖的時候,實際上是對基礎(chǔ)表的查詢。視圖不僅可以作為SELECT查詢的目標(biāo),也可以作為修改語句的目標(biāo)。當(dāng)然,當(dāng)你修改視圖的時候,修改的時候是對基礎(chǔ)表的修改,它就好像是一個代理。當(dāng)然,如果不允許直接修改基礎(chǔ)表,只允許修改視圖,就可以限制你要公開的數(shù)據(jù)。這樣,就可以對你的數(shù)據(jù)起到一定的保護(hù)作用,不過這種限制的時候很少。

那么在更新視圖的時候,有哪些限制條件呢?

1),只要視圖有一列不能隱式獲取值,你就不能想視圖中插入數(shù)據(jù),如果列允許NULL、有默認(rèn)值或者IDETITY屬性,則說明它可以隱式獲取值;

2),如果視圖包含聯(lián)結(jié),UPDATE或INSERT語句只能影響聯(lián)結(jié)的一端。也就是說,INSERT或UPDATE語句必須定義目標(biāo)列列表,這些列只能數(shù)據(jù)聯(lián)結(jié)的一端。你不能從由聯(lián)結(jié)查詢定義的視圖中刪除數(shù)據(jù);

3),不能修改作為計算結(jié)果的列。如:標(biāo)量表達(dá)式和聚合函數(shù),SqlServer不會嘗試改變數(shù)據(jù)庫引擎的計算結(jié)果;

4),如果在創(chuàng)建或修改視圖時指定了WITH CHECK OPTION選項,與視圖的查詢篩選器有沖突的INSERT或UPDATE語句將被拒絕;我在“視圖選項”一節(jié)詳細(xì)講解一下。

如果視圖上定義了INSERT OF觸發(fā)器,則違反這些限制的數(shù)據(jù)修改語句可以被執(zhí)行。在INSERT OF觸發(fā)器中你可以用自己的代碼替換原始修改;

當(dāng)你允許對有聯(lián)結(jié)查詢定義的視圖執(zhí)行修改的時候,一定要謹(jǐn)慎,比如一對多的關(guān)系,如果你根據(jù)“多”的某一索引值修改對應(yīng)“一”端某列值的記錄,那么結(jié)果就可想而知;

6.視圖選項

當(dāng)你創(chuàng)建或修改視圖時,可以指定一些選項,這些選項用戶控制視圖的行為和功能。

ENCRYPTION、SCHEMABINDING和VIEW_METADATA選項在視圖頭指定,CHECK OPTION選項則在查詢之后指定;

如:       

 

復(fù)制代碼代碼如下:
CREATE VIEW v2
WITH ENCRYPTION,SCHEMABINDING,VIEW_METADATA
AS
SELECT OrderID FROM dbo.Orders
WITH CHECK OPTION

 

1),ENCRYPTION

如果你在構(gòu)建任何類型的商業(yè)軟件的時候,需要對視圖進(jìn)行加密的時候,這是一個不錯的選項。

如果未指定ENCRYPTION選項,SQLSERVEr則以純文本的形式保存用戶定義的語句,如果指定了ENCRYPTION選項,對象的文本則會被混淆。

SQLSERVER提供了一個系統(tǒng)函數(shù)sp_helptext查看視圖的文本,如果應(yīng)用的ENCRYPTION選項,則會得到“The text for object ‘xx' is encrypted”語句;

注:在加密之前一定要先備份你所要加密的視圖,一旦加密,就不能回頭。

2),SCHEMABINDING

如果你使用SCHEMABINDING選項創(chuàng)建視圖,SQLSERVER將不允許刪除基礎(chǔ)表或修改被引用的列,防止在對底層對象修改時,使視圖變得“孤立”,如果某人沒有注意到你的視圖,執(zhí)行了DROP,刪除視圖引用的列或其他一些操作,那就很糟糕。如果使用SCHEMABINDING選項,則就可以避免這種情況。

如果想在視圖上創(chuàng)建索引,則必須使用SCHMABINDING選項;

如果應(yīng)用這個選項,則定義視圖的時候要注意兩點:

  1,所有對象必須由兩部分構(gòu)成的名稱,如:應(yīng)該使用dbo.Orders 而不能是Orders

  2,不能在SELECT列表使用*,所有的列名必須指定一個名稱;

3),CHECK OPTION

使用WITH CHECK OPTION 創(chuàng)建的視圖能防止與視圖查詢篩選器有沖突的INSERT或UPDATE語句。沒有該選項,視圖可以接受不符合查詢篩選器的修改。比如:

我們在Northwind數(shù)據(jù)庫中創(chuàng)建一個CustomWithOrder的視圖,現(xiàn)在還沒有添加WITH CHECK OPTION選項

 

復(fù)制代碼代碼如下:
CREATE VIEW CustomerWithOrder
WITH VIEW_METADATA
AS
SELECT Customers.CustomerID,Customers.CompanyName FROM Customers 
WHERE EXISTS(SELECT 1 FROM Orders WHERE Orders.CustomerID = Customers.CustomerID)

 


該視圖的作用是查詢所有有訂單的客戶的id和公司名,接下來我們向視圖中插入一條不存在的用戶id,和公司名:

 

復(fù)制代碼代碼如下:
INSERT INTO CustomerWithOrder(CustomerID,CompanyName) VALUES('MYSQL','MyReed')

 

執(zhí)行成功,然后在查詢這個CustomerWithOrder視圖,很明顯,查詢不到CustomerID為'MySQL'的用戶,因為視圖只包含發(fā)生過訂單的用戶;如果你直接查詢Customers表,就會發(fā)現(xiàn)這個新增的用戶信息了。

接下來對CustomerWithOrder視圖添加WITH CHECK OPTION 選項

 

復(fù)制代碼代碼如下:
ALTER VIEW CustomerWithOrder
WITH VIEW_METADATA
AS
SELECT Customers.CustomerID,Customers.CompanyName FROM Customers 
WHERE EXISTS(SELECT 1 FROM Orders WHERE Orders.CustomerID = Customers.CustomerID)
WITH CHECK OPTION

 

然后再執(zhí)行下面的語句:

 

復(fù)制代碼代碼如下:
INSERT INTO CustomerWithOrder(CustomerID,CompanyName) VALUES('ILSQL','MyReed')

 

你會收到以下錯誤:

Msg 550, Level 16, State 1, Line 2
試圖進(jìn)行的插入或更新已失敗,原因是目標(biāo)視圖或者目標(biāo)視圖所跨越的某一視圖指定了 WITH CHECK OPTION,而該操作的一個或多個結(jié)果行又不符合 CHECK OPTION 約束。
語句已終止。 

4),VIEW_METADATA

  該選項的作用是,讓視圖看起來更像一個真正的表。不使用該選項,返回給客戶端的api的元數(shù)據(jù)將是視圖所依賴的基礎(chǔ)表的數(shù)據(jù);

  如果客戶端希望SqlServer發(fā)送視圖的元數(shù)據(jù)信息,而不是基礎(chǔ)表的元數(shù)據(jù)時,可以在創(chuàng)建或修改視圖時指定此選項;是不是聽的很費勁,聽我慢慢說;

  假設(shè)用戶擁有對視圖的操作權(quán)限,而沒有對基礎(chǔ)表操作的權(quán)限,那么用戶對視圖執(zhí)行一些操作,如果指定了VIEW_METADATA選項,那么該語句將會違背安全而失敗,因為只要指定了VIEW_METADATA那么返回給客戶端就是視圖的元數(shù)據(jù),而不是基礎(chǔ)表的元數(shù)據(jù)。另一方面,如果用戶嘗試通過視圖修改數(shù)據(jù),而該操作又與視圖上定義的CHECK OPTION有沖突,這種操作只有直接提交到基礎(chǔ)表,才有可能成功。

  SqlServer中就有這樣的工具,在SqlServer2000中,企業(yè)管理器就是,如果我們向視圖中插入一條記錄,比如向在有WITH CHECK OPTION選項的CustomerWithOrder視圖中插入一個任意的消費者無論存在與否,并打開跟蹤企業(yè)管理器提交到Sql Server中的操作,你會發(fā)現(xiàn)操作實際把基礎(chǔ)表作為目標(biāo)提交的,及時他違背CHECK OPTION,也會成功。而在Sql Server2005中的SSMS中,就會不同了,如果在“Modify”視圖中,手動插入一條記錄,就可以成功,說明雖然指定了VIEW_METADATA和CHECK OPTION選項,它還是插入到了基礎(chǔ)表中了,可以跟蹤一下提交到Sqlserver的操作(用Sql server Profiler)。但如果在由“Open View”產(chǎn)生的面板中進(jìn)行操作,將會失敗,提示:
SQLServer

  可以再次跟蹤提交到Sql server的操作,就能看到,他提交到目標(biāo)對象是視圖;

  還是那句話:如果客戶端希望SqlServer發(fā)送視圖的元數(shù)據(jù)信息,而不是基礎(chǔ)表的元數(shù)據(jù)時,可以在創(chuàng)建或修改視圖時指定此選項

  這次明白了嗎?

  我個人總結(jié),只要有VIEW_METADATA選項就有必要加上CHECK OPTION選項,而SCHEMABINDING選項,最好也要加上,防止你的視圖“孤立”,而在索引視圖中SCHEMABINDING選項是必須加上的。

7.索引視圖

  如果沒有索引,視圖中的數(shù)據(jù)不會有任何物理表現(xiàn)形似,如果加上索引,則就把視圖中的數(shù)據(jù)物理化了,SqlServer會在修改基礎(chǔ)表時同步索引視圖。但你不能直接同步視圖內(nèi)容。

  我們知道在表上創(chuàng)建索引,能提高性能,相同,在視圖也是一樣,在視圖上創(chuàng)建的第一個索引必須是唯一聚集索引,之后才可以創(chuàng)建其他的非聚集索引。

  索引視圖必須使用SCHEMABINDING選項,并且不能引用其他視圖,只能引用基礎(chǔ)表和UDF,而基礎(chǔ)表和UDF必須使用兩部分命名約定來引用(參見5.視圖選項中的SCHEMABINDING選項)。

  除了性能,你可能還會因為其他原因使用索引視圖,比如在一張基礎(chǔ)表中有一列我們要強制該列中已知值的唯一性,但是允許出現(xiàn)多次的NULL值,我們怎么辦呢,我們首先想到的可能是用UNIQUE約束,但是UNIQUE會認(rèn)為兩個NULL值相等,那么這個不得不放棄了,那還有什么辦法呢?

  其實我們可以利用一個索引視圖來完成這個任務(wù),利用索引視圖篩選所有非NULL的數(shù)據(jù),那么這種索引將防止重復(fù)的已知值進(jìn)入基礎(chǔ)表,但允許多個NULL,因為NULL不是唯一索引的一部分,我們在向基礎(chǔ)表中插入數(shù)據(jù)的時候,就利用索引視圖的UNIQUE來限制我們的數(shù)據(jù),來達(dá)到某列中強制已知值的唯一性的目的;

我們可以演示一下,首先創(chuàng)建一個基礎(chǔ)表T2和一個索引視圖V2:

 

復(fù)制代碼代碼如下:
CREATE TABLE T2(col1 INT,col2 NVARCHAR(50))
CREATE VIEW V2
WITH SCHEMABINDING
AS
SELECT col1 FROM dbo.T2 WHERE col1 IS NOT NULL;
CREATE UNIQUE CLUSTERED INDEX idx_col1 ON dbo.V2(col1);

 

然后我們向T2表中插入以下數(shù)據(jù):

 

復(fù)制代碼代碼如下:
INSERT INTO t2(col1,col2) VALUES(1,'2')
INSERT INTO t2(col1,col2) VALUES(1,'3')
INSERT INTO t2(col1,col2) VALUES(null,'4')
INSERT INTO t2(col1,col2) VALUES(null,'5')

 

那么以上4條INSERT哪條會失敗呢?答案是2。最后讓我們SELECT 一下基礎(chǔ)表T2,看實現(xiàn)我們開始那個要求了嗎?

 

復(fù)制代碼代碼如下:
SELECT * FROM t2

 

執(zhí)行:
SQLServer



注:相關(guān)教程知識閱讀請移步到MSSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产色a在线| 国产经典av| 国产香蕉视频在线看| 久久99精品久久久久久野外| 午夜免费视频在线国产| 欧美性猛交xxxx免费看蜜桃| 欧美xxxx黑人又粗又长| 国产精品自产拍在线网站| 国产在线观看av| 国产免费人人看| 欧美96在线| 欧美xxxxx性| 免费看的毛片| 国产主播福利在线| 亚洲国产日韩成人综合天堂| 国产黄色在线观看| 依依成人在线| 激情六月婷婷| 国产精品入口麻豆免费看| 精品国内一区二区三区免费视频| 国产秒拍福利视频露脸| xxxx视频在线| 国产一区精品| www在线免费观看视频| 欧美性猛交xxxx免费看蜜桃| 国产日韩欧美精品一区二区三区| 国产视频三级在线观看播放| 国产小视频在线观看| 国产小视频在线观看| 亚洲永久免费网站| 九色福利视频| 国产激情在线| av在线首页| 99视频在线观看地址| 精品国产免费观看一区| 精品国产丝袜高跟鞋| 国产一卡2卡3卡免费网站| 亚洲一区免费在线| 国产无遮挡又黄又爽免费软件 | 国产深夜福利| 超碰在线97国产| 精品电影在线| 91午夜在线| 国产欧美久久久久久久久 | 精品国内自产拍在线视频| 免费午夜一级| 天堂资源最新版在线视频观看免费网 | 国产麻豆精品入口在线观看 | 亚洲国产aⅴ精品| 国产porn在线| 午夜视频免费在线观看| 精品无人乱码| 国产www在线观看| 二区中文字幕| 国产精品一二三区视频| 中文字幕在线免费看| 九九精品九九| 国产视频xxxx| 欧美aaa一级片| 国产原创精品视频| 国产成人久久精品77777| av日韩国产| 国产激情在线观看| 交换国产精品视频一区| 久久99亚洲网美利坚合众国| 亚洲电影先锋| 天堂在线视频| 国产不卡视频| 国产黄色在线播放| 亚洲天堂二区| 性欧美精品xxxx| 91三级在线| 国产不卡在线| 国产欧美日韩第一页| 日本成人网址| 精品国产一区二区三区久久久狼牙| 免费a级毛片在线播放| 精品一区二区在线欧美| 久久精品国产亚洲777| 高清欧美精品xxxxx在线看| 国产aⅴ超薄肉色丝袜交足| 午夜国产福利在线| 国产激情在线视频| 在线国产小视频| 高潮白浆视频| 五月婷婷在线视频| 国产三级在线免费观看| 中文字幕专区| 国产区在线观看| 2020中文字幕在线播放| 青青青手机在线视频观看| 三级小说一区| 成人午夜无人区一区二区| 国产小视频在线观看| 国产福利三区| 国产精品乱码一区二区三区视频 | 精品无人区乱码1区2区3区免费 | 大香伊人久久| 国产porny蝌蚪视频| 久久综合精品视频| 午夜不卡视频| 国产在线观看网站| 免费在线你懂的| 国产福利视频在线| 久久精品国产麻豆| 九九在线观看免费视频| 久久香蕉一区| 久久综合精品视频| 国产在线观看18| 伊人网在线免费观看| 91亚洲天堂| 中文字幕在线看精品乱码| 老司机在线视频二区| 国产成人午夜精品| 91中文在线| a√在线视频| 亚洲电影视频在线| 九九热在线视频免费观看| av在线第一页| 最新黄网在线观看| 精品一区二区91| 国产激情自拍| 天天爱天天做色综合| 国产精品伦一区二区三区视频| 国产在线播放av| 国产成a人亚洲精v品| 91超碰免费在线| 日本一级理论片在线大全| 国产91足控脚交在线观看| 狠狠操视频网| 亚洲人av在线| 国产欧美日韩第一页| 国产字幕在线看| 国产天堂资源| 国产精品一区二区婷婷| 日本黄色免费网址| 制服丝袜中文字幕在线观看| www.五月色.com| 国产精品白浆流出视频| jizz亚洲| 精品国产一区二区三区四区阿崩 | 日本电影在线观看| 91九色在线看| 亚洲夜夜综合| 国产二级c片l毛片| 天堂在线免费av| 69视频在线| 四虎久久影院| 欧美96在线| 免费视频二区| 永久av在线| 国产在线一二三区| 日本视频在线观看一区二区三区| 国产黄色高清在线| 在线三级av| 99视频资源网| 黄色国产网站在线播放| 国产导航在线| 免费特级黄毛片| 福利视频网址导航| 国产日韩欧美第一页| 精品网站www| 99视频免费在线观看| 欧美日韩在线视频免费观看 | 国产小视频在线高清播放| 午夜视频在线免费| 国产美女在线免费观看| 精品国内自产拍在线视频| 五月婷婷开心综合| 精品国产福利一区二区在线 | 精品资源在线看| 国产原创在线播放| 亚洲欧美精选| 国产一区电影| 久久久久久久久亚洲精品| 国产青青草在线| 黄色三级视频在线观看| 国产一级粉嫩xxxx| 日本高清中文字幕二区在线| 在线观看av资源网| 国产极品美女到高潮| 中文字幕亚洲精品视频| 成在在线免费视频| 中文字幕在线影院| 天堂资源在线中文| 91资源在线观看| 免费看黄视频网站| 精品美女在线观看视频在线观看 | 尤物视频在线观看| 日本视频一二三区中文字幕| 免费黄网站在线观看| 国产对白在线| 91福利在线免费| 在线观看的av| 国产黄色免费网站| 国产乱xxⅹxx国语对白| 浪潮av一区| 天天插天天干| 国产尤物一区二区三区| 在线播放www|