大型數(shù)據(jù)庫(kù)技術(shù)第09章視圖的規(guī)劃與操作_第1頁(yè)
大型數(shù)據(jù)庫(kù)技術(shù)第09章視圖的規(guī)劃與操作_第2頁(yè)
大型數(shù)據(jù)庫(kù)技術(shù)第09章視圖的規(guī)劃與操作_第3頁(yè)
大型數(shù)據(jù)庫(kù)技術(shù)第09章視圖的規(guī)劃與操作_第4頁(yè)
大型數(shù)據(jù)庫(kù)技術(shù)第09章視圖的規(guī)劃與操作_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-191 9.1 視圖的作用與規(guī)劃視圖的作用與規(guī)劃 9.2 視圖操作視圖操作 9.3 視圖應(yīng)用綜合實(shí)例分析視圖應(yīng)用綜合實(shí)例分析 第第9 9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-192 9.1 9.1 視圖的作用與規(guī)劃視圖的作用與規(guī)劃 視圖是關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)提供給用戶(hù)以多種角度觀察數(shù)視圖是關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)提供給用戶(hù)以多種角度觀察數(shù) 據(jù)庫(kù)中數(shù)據(jù)的重要機(jī)制。據(jù)庫(kù)中數(shù)據(jù)的重要機(jī)制。

2、 視圖對(duì)應(yīng)于三級(jí)模式中的外模式(用戶(hù)模式),它是視圖對(duì)應(yīng)于三級(jí)模式中的外模式(用戶(hù)模式),它是 從一個(gè)或幾個(gè)基本表導(dǎo)出的表,由從一個(gè)或幾個(gè)基本表導(dǎo)出的表,由CREATE VIEW命命 令創(chuàng)建。令創(chuàng)建。 視圖又稱(chēng)為虛擬表,因?yàn)閿?shù)據(jù)庫(kù)中存放著視圖的定義視圖又稱(chēng)為虛擬表,因?yàn)閿?shù)據(jù)庫(kù)中存放著視圖的定義 及其關(guān)聯(lián)的基本表名等信息,而不存放視圖對(duì)應(yīng)的數(shù)及其關(guān)聯(lián)的基本表名等信息,而不存放視圖對(duì)應(yīng)的數(shù) 據(jù)。據(jù)。 視圖一經(jīng)定義,就可以和基本表一樣被查詢(xún)、被刪除,視圖一經(jīng)定義,就可以和基本表一樣被查詢(xún)、被刪除, 但對(duì)視圖的更新(增加、刪除、修改)操作則有一定但對(duì)視圖的更新(增加、刪除、修改)操作則有一定 的限制的

3、限制 。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-193 9.1.1 9.1.1 視圖的作用視圖的作用 數(shù)據(jù)庫(kù)使用視圖機(jī)制主要有以下優(yōu)點(diǎn):數(shù)據(jù)庫(kù)使用視圖機(jī)制主要有以下優(yōu)點(diǎn): (1)視圖能夠簡(jiǎn)化用戶(hù)的操作)視圖能夠簡(jiǎn)化用戶(hù)的操作 視圖機(jī)制使用戶(hù)可以將注意力集中在所關(guān)心的數(shù)據(jù)上。視圖機(jī)制使用戶(hù)可以將注意力集中在所關(guān)心的數(shù)據(jù)上。 (2)視圖使用戶(hù)能以多種角度看待同一數(shù)據(jù))視圖使用戶(hù)能以多種角度看待同一數(shù)據(jù) 視圖機(jī)制能使不同崗位、不同職責(zé)、不同需求的用戶(hù)視圖機(jī)制能使不同崗位、不同職責(zé)、不同需求的用戶(hù) 按照自己的方式看待同一數(shù)據(jù)按

4、照自己的方式看待同一數(shù)據(jù) (3)視圖為數(shù)據(jù)庫(kù)重構(gòu)提供了一定程度的邏輯獨(dú)立性。)視圖為數(shù)據(jù)庫(kù)重構(gòu)提供了一定程度的邏輯獨(dú)立性。 (4)視圖能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù))視圖能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù) 對(duì)不同的用戶(hù)定義不同的視圖,使機(jī)密數(shù)據(jù)不出現(xiàn)在對(duì)不同的用戶(hù)定義不同的視圖,使機(jī)密數(shù)據(jù)不出現(xiàn)在 不應(yīng)看到這些數(shù)據(jù)的用戶(hù)視圖上,這樣視圖機(jī)制就自不應(yīng)看到這些數(shù)據(jù)的用戶(hù)視圖上,這樣視圖機(jī)制就自 動(dòng)提供了對(duì)機(jī)密數(shù)據(jù)的安全保護(hù)功能。動(dòng)提供了對(duì)機(jī)密數(shù)據(jù)的安全保護(hù)功能。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-194 9.1.2 9.1.2 視

5、圖的規(guī)劃視圖的規(guī)劃 在設(shè)計(jì)好數(shù)據(jù)庫(kù)的全局邏輯結(jié)構(gòu)后,還應(yīng)該根據(jù)在設(shè)計(jì)好數(shù)據(jù)庫(kù)的全局邏輯結(jié)構(gòu)后,還應(yīng)該根據(jù) 局部應(yīng)用的需求,結(jié)合局部應(yīng)用的需求,結(jié)合DBMS的特點(diǎn),設(shè)計(jì)局部應(yīng)的特點(diǎn),設(shè)計(jì)局部應(yīng) 用的數(shù)據(jù)庫(kù)局部邏輯結(jié)構(gòu),即設(shè)計(jì)更符合局部用用的數(shù)據(jù)庫(kù)局部邏輯結(jié)構(gòu),即設(shè)計(jì)更符合局部用 戶(hù)需要的用戶(hù)視圖。戶(hù)需要的用戶(hù)視圖。 定義數(shù)據(jù)庫(kù)全局邏輯結(jié)構(gòu)主要從系統(tǒng)的時(shí)間效率、定義數(shù)據(jù)庫(kù)全局邏輯結(jié)構(gòu)主要從系統(tǒng)的時(shí)間效率、 空間效率、易維護(hù)等角度出發(fā)??臻g效率、易維護(hù)等角度出發(fā)。 定義用戶(hù)局部視圖時(shí)可以注重考慮用戶(hù)的習(xí)慣與定義用戶(hù)局部視圖時(shí)可以注重考慮用戶(hù)的習(xí)慣與 方便。方便。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)

6、劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-195 9.1.2 9.1.2 視圖的規(guī)劃視圖的規(guī)劃 定義用戶(hù)局部視圖時(shí)可以主要考慮以下幾個(gè)方面:定義用戶(hù)局部視圖時(shí)可以主要考慮以下幾個(gè)方面: (1)使用更符合用戶(hù)習(xí)慣的別名)使用更符合用戶(hù)習(xí)慣的別名 在設(shè)計(jì)數(shù)據(jù)庫(kù)總體結(jié)構(gòu)時(shí),同一關(guān)系和屬性具有唯一的名字,在設(shè)計(jì)數(shù)據(jù)庫(kù)總體結(jié)構(gòu)時(shí),同一關(guān)系和屬性具有唯一的名字, 但是,在局部應(yīng)用中,對(duì)同一關(guān)系或?qū)傩?,有自己更加?xí)慣的但是,在局部應(yīng)用中,對(duì)同一關(guān)系或?qū)傩?,有自己更加?xí)慣的 名字。我們可以用視圖機(jī)制在設(shè)計(jì)用戶(hù)視圖時(shí)重新定義某些屬名字。我們可以用視圖機(jī)制在設(shè)計(jì)用戶(hù)視圖時(shí)重新定

7、義某些屬 性名,使其與用戶(hù)習(xí)慣一致,以方便使用。性名,使其與用戶(hù)習(xí)慣一致,以方便使用。 (2)可以對(duì)不同級(jí)別的用戶(hù)定義不同的視圖,以保證系統(tǒng)的安全性。)可以對(duì)不同級(jí)別的用戶(hù)定義不同的視圖,以保證系統(tǒng)的安全性。 (3)簡(jiǎn)化用戶(hù)對(duì)系統(tǒng)的使用)簡(jiǎn)化用戶(hù)對(duì)系統(tǒng)的使用 如果某些局部應(yīng)用中經(jīng)常要使用某些很復(fù)雜的查詢(xún),為了方便如果某些局部應(yīng)用中經(jīng)常要使用某些很復(fù)雜的查詢(xún),為了方便 用戶(hù),可以將這些復(fù)雜查詢(xún)定義為視圖,用戶(hù)每次只對(duì)定義好用戶(hù),可以將這些復(fù)雜查詢(xún)定義為視圖,用戶(hù)每次只對(duì)定義好 的視圖進(jìn)行查詢(xún),大大簡(jiǎn)化了用戶(hù)的使用。的視圖進(jìn)行查詢(xún),大大簡(jiǎn)化了用戶(hù)的使用。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操

8、作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-196 9.2 9.2 視圖操作視圖操作 9.2.1 9.2.1 創(chuàng)建視圖創(chuàng)建視圖 SQL SERVER 提供了使用提供了使用SQL SERVER 資源對(duì)象管理器和資源對(duì)象管理器和SQL 命令兩種方法來(lái)創(chuàng)建視圖。命令兩種方法來(lái)創(chuàng)建視圖。 在創(chuàng)建或使用視圖,時(shí)應(yīng)該注意到以下情況:在創(chuàng)建或使用視圖,時(shí)應(yīng)該注意到以下情況: 只能在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建視圖,在視圖中最多只能引用只能在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建視圖,在視圖中最多只能引用1024 列;列; 如果視圖引用的表被刪除,則當(dāng)使用該視圖時(shí)將返回一條錯(cuò)誤信息,如果視圖引用的表被刪除,則當(dāng)使用

9、該視圖時(shí)將返回一條錯(cuò)誤信息, 如果創(chuàng)建具有相同的表的結(jié)構(gòu)新表來(lái)替代已刪除的表視圖則可以使用,如果創(chuàng)建具有相同的表的結(jié)構(gòu)新表來(lái)替代已刪除的表視圖則可以使用, 否則必須重新創(chuàng)建視圖;否則必須重新創(chuàng)建視圖; 如果視圖中某一列是函數(shù)、數(shù)學(xué)表達(dá)式、常量或來(lái)自多個(gè)表的列名相如果視圖中某一列是函數(shù)、數(shù)學(xué)表達(dá)式、常量或來(lái)自多個(gè)表的列名相 同,則必須為列定義名字;同,則必須為列定義名字; 定義視圖的查詢(xún)語(yǔ)句不能包含定義視圖的查詢(xún)語(yǔ)句不能包含COMPUTE或或COMPUTEBY子句;不子句;不 能包含能包含ORDER BY子句,除非在子句,除非在SELECT語(yǔ)句的選擇列表中也有一個(gè)語(yǔ)句的選擇列表中也有一個(gè) TOP

10、子句;不能包含子句;不能包含INTO關(guān)鍵字;不能引用臨時(shí)表或表變量。關(guān)鍵字;不能引用臨時(shí)表或表變量。 不能在視圖上創(chuàng)建全文索引、規(guī)則、默認(rèn)值和不能在視圖上創(chuàng)建全文索引、規(guī)則、默認(rèn)值和after觸發(fā)器;不能在規(guī)觸發(fā)器;不能在規(guī) 則、缺省、觸發(fā)器的定義中引用視圖;則、缺省、觸發(fā)器的定義中引用視圖; 不能創(chuàng)建臨時(shí)視圖,也不能在臨時(shí)表上建立視圖。不能創(chuàng)建臨時(shí)視圖,也不能在臨時(shí)表上建立視圖。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-197 1 1使用使用SQL SERVERSQL SERVER資源對(duì)象管理器來(lái)創(chuàng)建視圖資源對(duì)象管理器

11、來(lái)創(chuàng)建視圖 在在SQL SERVER中使用中使用SQL SERVER資源對(duì)象管理器資源對(duì)象管理器 來(lái)創(chuàng)建視圖。來(lái)創(chuàng)建視圖。 步驟如下:步驟如下: 啟動(dòng)啟動(dòng)SQL SERVER資源對(duì)象管理器,登錄到指定的資源對(duì)象管理器,登錄到指定的 服務(wù)器;服務(wù)器; 打開(kāi)要?jiǎng)?chuàng)建視圖的數(shù)據(jù)庫(kù)文件夾,選中打開(kāi)要?jiǎng)?chuàng)建視圖的數(shù)據(jù)庫(kù)文件夾,選中視圖視圖圖圖 標(biāo),此時(shí)在右面的窗格中顯示當(dāng)前數(shù)據(jù)庫(kù)的所有視標(biāo),此時(shí)在右面的窗格中顯示當(dāng)前數(shù)據(jù)庫(kù)的所有視 圖,右擊圖標(biāo),在彈出菜單中選擇圖,右擊圖標(biāo),在彈出菜單中選擇新建視圖新建視圖選選 項(xiàng),打開(kāi)項(xiàng),打開(kāi)新建視圖新建視圖對(duì)話(huà)框。如下圖所示。在對(duì)話(huà)框。如下圖所示。在 添加表添加表對(duì)話(huà)框

12、中出現(xiàn)數(shù)據(jù)庫(kù)下所有表名。對(duì)話(huà)框中出現(xiàn)數(shù)據(jù)庫(kù)下所有表名。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-198圖圖9-1 9-1 新建視圖對(duì)話(huà)框新建視圖對(duì)話(huà)框 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-199 1使用SQL SERVER資源對(duì)象管理器來(lái)創(chuàng)建視圖 選擇創(chuàng)建視圖所用的表,點(diǎn)擊選擇創(chuàng)建視圖所用的表,點(diǎn)擊添加添加按鈕,將表添加到表區(qū),按鈕,將表添加到表區(qū), 如圖如圖9-2所示:所示: 圖圖9-2 9-2 添加表對(duì)話(huà)框添加表對(duì)話(huà)框 第第9章章 視圖的規(guī)

13、劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1910 1 1使用使用SQL SERVERSQL SERVER資源對(duì)象管理器來(lái)創(chuàng)建視圖資源對(duì)象管理器來(lái)創(chuàng)建視圖 在相應(yīng)表列區(qū)中選擇將包括在視圖的數(shù)據(jù)列,此時(shí)在相應(yīng)表列區(qū)中選擇將包括在視圖的數(shù)據(jù)列,此時(shí) 相應(yīng)的相應(yīng)的SQL SERVER SQL SERVER 腳本便顯示在腳本便顯示在SQL script SQL script 區(qū);區(qū); 選擇選擇輸出輸出下的多選框,在下的多選框,在SQLSQL腳本的輸出位置腳本的輸出位置 出現(xiàn)相應(yīng)的列名;出現(xiàn)相應(yīng)的列名; 單擊單擊 按鈕,在彈出對(duì)話(huà)框中輸入視圖名,單擊按

14、鈕,在彈出對(duì)話(huà)框中輸入視圖名,單擊 【保存】完成視圖的創(chuàng)建?!颈4妗客瓿梢晥D的創(chuàng)建。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1911 2Transact-SQL 命令創(chuàng)建視圖命令創(chuàng)建視圖 使用使用Transact-SQL 命令命令CREATE VIEW 創(chuàng)建視圖。創(chuàng)建視圖。 語(yǔ)法格式:語(yǔ)法格式: CREATE VIEW . . view_name ( column ,.n ) WITH ,.n AS select_statement WITH CHECK OPTION := ENCRYPTION | SCHEMABIN

15、DING | VIEW_METADATA 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1912 2Transact-SQL 命令創(chuàng)建視圖命令創(chuàng)建視圖 參數(shù)說(shuō)明:參數(shù)說(shuō)明: (1)view_name:是視圖的名稱(chēng)。視圖名稱(chēng)必須符合標(biāo)識(shí)符規(guī)則??桑菏且晥D的名稱(chēng)。視圖名稱(chēng)必須符合標(biāo)識(shí)符規(guī)則。可 以選擇是否指定視圖所有者名稱(chēng)。以選擇是否指定視圖所有者名稱(chēng)。 (2)Column:是視圖中的列名。只有在下列情況下,才必須命名:是視圖中的列名。只有在下列情況下,才必須命名 CREATE VIEW中的列:當(dāng)列是從算術(shù)表達(dá)式、函數(shù)或常量派生的

16、,中的列:當(dāng)列是從算術(shù)表達(dá)式、函數(shù)或常量派生的, 兩個(gè)或更多的列可能會(huì)具有相同的名稱(chēng)(通常是因?yàn)槁?lián)接),視圖兩個(gè)或更多的列可能會(huì)具有相同的名稱(chēng)(通常是因?yàn)槁?lián)接),視圖 中的某列被賦予了不同于派生來(lái)源列的名稱(chēng),以便符合用戶(hù)習(xí)慣。中的某列被賦予了不同于派生來(lái)源列的名稱(chēng),以便符合用戶(hù)習(xí)慣。 還可以在還可以在SELECT語(yǔ)句中指派列名。如果未指定語(yǔ)句中指派列名。如果未指定column,則視圖列,則視圖列 與與SELECT語(yǔ)句中的列具有相同的名稱(chēng)。語(yǔ)句中的列具有相同的名稱(chēng)。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1913 2Tr

17、ansact-SQL 命令創(chuàng)建視圖命令創(chuàng)建視圖 (3)AS:是視圖要執(zhí)行的操作。:是視圖要執(zhí)行的操作。 (4)select_statement:是定義視圖的:是定義視圖的SELECT語(yǔ)句。該語(yǔ)句可以使語(yǔ)句。該語(yǔ)句可以使 用多個(gè)表或其它視圖。若要從創(chuàng)建視圖的用多個(gè)表或其它視圖。若要從創(chuàng)建視圖的SELECT子句所引用的子句所引用的 對(duì)象中選擇,必須具有適當(dāng)?shù)臋?quán)限。對(duì)象中選擇,必須具有適當(dāng)?shù)臋?quán)限。 視圖不必是具體某個(gè)表的行和列的簡(jiǎn)單子集??梢杂镁哂腥我晥D不必是具體某個(gè)表的行和列的簡(jiǎn)單子集??梢杂镁哂腥?意復(fù)雜性的意復(fù)雜性的 SELECT 子句,使用多個(gè)表或其它視圖來(lái)創(chuàng)建視圖。子句,使用多個(gè)表或其它視

18、圖來(lái)創(chuàng)建視圖。 在索引視圖定義中,在索引視圖定義中,SELECT語(yǔ)句必須是單個(gè)表的語(yǔ)句或帶語(yǔ)句必須是單個(gè)表的語(yǔ)句或帶 有可選聚合的多表有可選聚合的多表JOIN。 在在select_statement中可以使用函數(shù)。中可以使用函數(shù)。select_statement可使用可使用 多個(gè)由多個(gè)由UNION或或UNION ALL分隔的分隔的SELECT語(yǔ)句。語(yǔ)句。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1914 2Transact-SQL 命令創(chuàng)建視圖命令創(chuàng)建視圖 (5)WITH CHECK OPTION:強(qiáng)制視圖上執(zhí)行的所有數(shù)

19、據(jù)修:強(qiáng)制視圖上執(zhí)行的所有數(shù)據(jù)修 改語(yǔ)句都必須符合由改語(yǔ)句都必須符合由 select_statement設(shè)置的準(zhǔn)則。通過(guò)視圖修改設(shè)置的準(zhǔn)則。通過(guò)視圖修改 行時(shí),行時(shí),WITH CHECK OPTION可確保提交修改后,仍可通過(guò)視可確保提交修改后,仍可通過(guò)視 圖看到修改的數(shù)據(jù)。圖看到修改的數(shù)據(jù)。 (6)WITH ENCRYPTION:表示:表示 SQL Server 加密包含加密包含 CREATE VIEW語(yǔ)句文本的系統(tǒng)表列。使用語(yǔ)句文本的系統(tǒng)表列。使用WITH ENCRYPTION可防止將視圖作為可防止將視圖作為SQL Server復(fù)制的一部分發(fā)布。復(fù)制的一部分發(fā)布。 (7)SCHEMABIN

20、DING:將視圖綁定到架構(gòu)上。:將視圖綁定到架構(gòu)上。 (8)VIEW_METADATA:指定為引用視圖的查詢(xún)請(qǐng)求瀏覽模式:指定為引用視圖的查詢(xún)請(qǐng)求瀏覽模式 的元數(shù)據(jù)時(shí),的元數(shù)據(jù)時(shí),SQL Server 將向?qū)⑾駾BLIB、ODBC和和OLE DB API返返 回有關(guān)視圖的元數(shù)據(jù)信息,而不是返回基表或表回有關(guān)視圖的元數(shù)據(jù)信息,而不是返回基表或表 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1915 3 3視圖創(chuàng)建實(shí)例視圖創(chuàng)建實(shí)例 【例】使用簡(jiǎn)單的【例】使用簡(jiǎn)單的 CREATE VIEW 創(chuàng)建具有簡(jiǎn)單創(chuàng)建具有簡(jiǎn)單 SELECT

21、語(yǔ)句的視圖。當(dāng)需要頻繁地查詢(xún)列的某種語(yǔ)句的視圖。當(dāng)需要頻繁地查詢(xún)列的某種 組合時(shí),簡(jiǎn)單視圖非常有用。組合時(shí),簡(jiǎn)單視圖非常有用。 USE 教學(xué)管理教學(xué)管理 GOGO IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = V_課程表查詢(xún)課程表查詢(xún)) DROP VIEW V_課程表查詢(xún)課程表查詢(xún) GO CREATE VIEW V_課程表查詢(xún)課程表查詢(xún) AS SELECT 課號(hào)課號(hào), 課名課名, 教材名稱(chēng)教材名稱(chēng), 編著者編著者, 出版社出版社 FROM 課程表課程表 GO 第第9章章 視圖的規(guī)劃與操

22、作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1916 【例】使用【例】使用WITH ENCRYPTION 使用使用WITH ENCRYPTION選項(xiàng)和內(nèi)置函數(shù),使用函數(shù)時(shí),必須為選項(xiàng)和內(nèi)置函數(shù),使用函數(shù)時(shí),必須為 派生列指定列名。派生列指定列名。 USE 教學(xué)管理教學(xué)管理 IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = V_學(xué)生平均成績(jī)學(xué)生平均成績(jī)) DROP VIEW V_學(xué)生平均成績(jī)學(xué)生平均成績(jī) GO CREATE VIEW V_學(xué)生平均成

23、績(jī)學(xué)生平均成績(jī) (學(xué)號(hào)學(xué)號(hào), 姓名姓名, 平均成績(jī)平均成績(jī)) WITH ENCRYPTION AS SELECT S.學(xué)號(hào)學(xué)號(hào), 姓名姓名, AVG(成績(jī)成績(jī)) FROM 學(xué)生表學(xué)生表 S, 選課表選課表 E WHERE S.學(xué)號(hào)學(xué)號(hào)=E.學(xué)號(hào)學(xué)號(hào) GROUP BY S.學(xué)號(hào)學(xué)號(hào),姓名姓名 GO 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1917 使用了使用了 WITH ENCRYPTIONWITH ENCRYPTION選項(xiàng),只能看到一段怪字符,即加了密的文本選項(xiàng),只能看到一段怪字符,即加了密的文本 USE 教學(xué)管理教學(xué)管

24、理 GO SELECT c.id, c.text FROM syscomments c, sysobjects o WHERE c.id = o.id and = V_學(xué)生平均成績(jī)學(xué)生平均成績(jī) GO 顯示結(jié)果為:顯示結(jié)果為: id text 85575343 霤簎鸐晣霤簎鸐晣壙唯粧壙唯粧陼陼 隴隴旚旚 釐厈釐厈俑俑獀獀 蟺蟺? 駻秮駻秮莭莭性性 鋤硙惗鋤硙惗毫髰栿毫髰栿?閫閫 磢磢 ?挈挈紩紩疪疪 珗珗抋抋庛桯庛桯愌愌 櫐櫐 歿歿捐捐硩埔硩埔 聬聬麊苩瀒麊苩瀒 甹甹骫骫醠醠 ? 氻氻 韹韹 栭栭鶚鶚撯撯悕荿悕荿 蕍穤蕍穤?玀玀 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)

25、據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1918 【例】使用【例】使用WITH CHECK OPTION, 該視圖使得只能對(duì)該視圖使得只能對(duì) 指定條件指定條件的學(xué)生做數(shù)據(jù)修改。的學(xué)生做數(shù)據(jù)修改。 USE 教學(xué)管理教學(xué)管理 IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = V_僅對(duì)信電學(xué)院僅對(duì)信電學(xué)院) DROP VIEW V_僅對(duì)信電學(xué)院僅對(duì)信電學(xué)院 GO CREATE VIEW V_僅對(duì)信電學(xué)院僅對(duì)信電學(xué)院 AS SELECT 學(xué)號(hào)學(xué)號(hào), 身份證號(hào)身份證號(hào), 姓名姓

26、名, 性別性別, 移動(dòng)電話(huà)移動(dòng)電話(huà), 籍貫籍貫, 專(zhuān)業(yè)專(zhuān)業(yè), 所在院系所在院系, 累計(jì)學(xué)分累計(jì)學(xué)分 FROM 學(xué)生表學(xué)生表 WHERE 所在院系所在院系 = 信電學(xué)院信電學(xué)院 WITH CHECK OPTION GO 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1919 驗(yàn)證驗(yàn)證 執(zhí)行以下執(zhí)行以下INSERTINSERT語(yǔ)句:語(yǔ)句: INSERT INTO V_僅對(duì)信電學(xué)院僅對(duì)信電學(xué)院 VALUES(S060501,*19890428*,張斌張斌,男男 ,130*34,寧波寧波,會(huì)計(jì)學(xué)會(huì)計(jì)學(xué),會(huì)計(jì)學(xué)院會(huì)計(jì)學(xué)院,162) 由于

27、所插入的學(xué)生是會(huì)計(jì)系學(xué)生,不屬于該視圖的數(shù)據(jù),則系統(tǒng)返由于所插入的學(xué)生是會(huì)計(jì)系學(xué)生,不屬于該視圖的數(shù)據(jù),則系統(tǒng)返 回錯(cuò)誤信息為:回錯(cuò)誤信息為: 消息消息550,級(jí)別,級(jí)別16,狀態(tài),狀態(tài)1,第,第1 行行 試圖進(jìn)行的插入或更新已失敗,原因是目標(biāo)視圖或者目標(biāo)視圖所跨試圖進(jìn)行的插入或更新已失敗,原因是目標(biāo)視圖或者目標(biāo)視圖所跨 越的某一視圖指定了越的某一視圖指定了WITH CHECK OPTION,而該操作的一個(gè),而該操作的一個(gè) 或多個(gè)結(jié)果行又不符合或多個(gè)結(jié)果行又不符合CHECK OPTION 約束。約束。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2

28、005 2021-6-1920 9.2.2 9.2.2 視圖的修改、重命名和刪除視圖的修改、重命名和刪除 1修改視圖 修改一個(gè)先前創(chuàng)建的視圖的定義,使用修改一個(gè)先前創(chuàng)建的視圖的定義,使用 ALTER VIEW語(yǔ)句。語(yǔ)句。ALTER VIEW語(yǔ)句不影響語(yǔ)句不影響 相關(guān)的存儲(chǔ)過(guò)程或觸發(fā)器,也不更改權(quán)限。相關(guān)的存儲(chǔ)過(guò)程或觸發(fā)器,也不更改權(quán)限。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1921 語(yǔ)法格式:語(yǔ)法格式: ALTER VIEW . . view_name ( column ,.n ) WITH ,.n AS selec

29、t_statement WITH CHECK OPTION : : = E N C R Y P T I O N | SCHEMABINDING | VIEW_METADATA 參數(shù)說(shuō)明:參數(shù)說(shuō)明: 如果原來(lái)的視圖定義是用如果原來(lái)的視圖定義是用WITH ENCRYPTIONWITH ENCRYPTION或或CHECK OPTIONCHECK OPTION創(chuàng)建的,那創(chuàng)建的,那 么只有在么只有在ALTER VIEWALTER VIEW中也包含這些選項(xiàng)時(shí),這些選項(xiàng)才有效。中也包含這些選項(xiàng)時(shí),這些選項(xiàng)才有效。 如果使用如果使用ALTER VIEWALTER VIEW更改當(dāng)前正在使用的視圖,更改當(dāng)前正在使

30、用的視圖,SQL ServerSQL Server將在該視將在該視 圖上放一個(gè)排它架構(gòu)鎖。當(dāng)鎖已授予,并且該視圖沒(méi)有活動(dòng)用戶(hù)時(shí),圖上放一個(gè)排它架構(gòu)鎖。當(dāng)鎖已授予,并且該視圖沒(méi)有活動(dòng)用戶(hù)時(shí), SQL Server SQL Server 將從過(guò)程緩存中刪除該視圖的所有復(fù)本。引用該視圖的現(xiàn)將從過(guò)程緩存中刪除該視圖的所有復(fù)本。引用該視圖的現(xiàn) 有計(jì)劃將繼續(xù)保留在緩存中,但當(dāng)喚醒調(diào)用時(shí)將重新編譯。有計(jì)劃將繼續(xù)保留在緩存中,但當(dāng)喚醒調(diào)用時(shí)將重新編譯。 ALTER VIEWALTER VIEW可應(yīng)用于索引視圖。然而,可應(yīng)用于索引視圖。然而,ALTER VIEWALTER VIEW將無(wú)條件地除去視將無(wú)條件地除去

31、視 圖上的所有索引。圖上的所有索引。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1922 權(quán)限: ALTER VIEWALTER VIEW的權(quán)限默認(rèn)地授予的權(quán)限默認(rèn)地授予db_ownerdb_owner和和db_ddladmindb_ddladmin固定固定 數(shù)據(jù)庫(kù)角色的成員,以及視圖所有者。這些權(quán)限是不可傳遞的。數(shù)據(jù)庫(kù)角色的成員,以及視圖所有者。這些權(quán)限是不可傳遞的。 若要更改視圖,用戶(hù)必須具有若要更改視圖,用戶(hù)必須具有ALTER VIEWALTER VIEW權(quán)限,并且對(duì)視圖權(quán)限,并且對(duì)視圖 中引用的表、視圖和表值函數(shù)具

32、有中引用的表、視圖和表值函數(shù)具有SELECTSELECT權(quán)限,對(duì)視圖中調(diào)用的權(quán)限,對(duì)視圖中調(diào)用的 標(biāo)量值函數(shù)具有標(biāo)量值函數(shù)具有EXECUTE EXECUTE 權(quán)限。權(quán)限。 此外,用戶(hù)若要更改視圖此外,用戶(hù)若要更改視圖WITH SCHEMABINDINGWITH SCHEMABINDING,則必須對(duì)每,則必須對(duì)每 一個(gè)引用的表、視圖和用戶(hù)定義函數(shù)具有一個(gè)引用的表、視圖和用戶(hù)定義函數(shù)具有REFERENCESREFERENCES權(quán)限。權(quán)限。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1923 【例】更改視圖【例】更改視圖 創(chuàng)建名

33、創(chuàng)建名“為為V_V_全體教師信息全體教師信息”的視圖,該視圖的視圖,該視圖 包含全部的教師,并將該視圖的查詢(xún)權(quán)授予所有用包含全部的教師,并將該視圖的查詢(xún)權(quán)授予所有用 戶(hù)。但是由于該視圖中包含了教師的編號(hào)、身份證戶(hù)。但是由于該視圖中包含了教師的編號(hào)、身份證 號(hào)等個(gè)人信息,需使用號(hào)等個(gè)人信息,需使用ALTER VIEWALTER VIEW替換該視圖,不替換該視圖,不 包括工號(hào)、身份證號(hào)、籍貫等個(gè)人信息,以保護(hù)教包括工號(hào)、身份證號(hào)、籍貫等個(gè)人信息,以保護(hù)教 師個(gè)人隱私。師個(gè)人隱私。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-19

34、24 - 根據(jù)教師表創(chuàng)建包含所有教師信息的視圖根據(jù)教師表創(chuàng)建包含所有教師信息的視圖. CREATE VIEW V_全體教師信息全體教師信息 (工號(hào)工號(hào),身份證號(hào)身份證號(hào),姓名姓名,移動(dòng)電話(huà)移動(dòng)電話(huà),籍籍 貫貫,所在院系所在院系,職稱(chēng)職稱(chēng)) AS SELECT 工號(hào)工號(hào),身份證號(hào)身份證號(hào),姓名姓名,移動(dòng)電話(huà)移動(dòng)電話(huà),籍貫籍貫,所在院系所在院系,職稱(chēng)職稱(chēng) FROM 教學(xué)管理教學(xué)管理.教師表教師表 GO - 將該視圖的查詢(xún)權(quán)授予所有用戶(hù)將該視圖的查詢(xún)權(quán)授予所有用戶(hù). GRANT SELECT ON V_全體教師信息全體教師信息 TO public GO - 改變視圖,去掉工號(hào)改變視圖,去掉工號(hào), 身

35、份證號(hào)身份證號(hào), 籍貫等個(gè)人信息。籍貫等個(gè)人信息。 ALTER VIEW V_全體教師信息全體教師信息 (姓名姓名,移動(dòng)電話(huà)移動(dòng)電話(huà),所在院系所在院系,職稱(chēng)職稱(chēng)) AS SELECT 姓名姓名,移動(dòng)電話(huà)移動(dòng)電話(huà),所在院系所在院系,職稱(chēng)職稱(chēng) FROM 教學(xué)管理教學(xué)管理.教師表教師表 GO 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1925 2 2視圖重命名視圖重命名 使用系統(tǒng)存儲(chǔ)過(guò)程使用系統(tǒng)存儲(chǔ)過(guò)程sp_rename 對(duì)已創(chuàng)建的視圖進(jìn)行重命名。對(duì)已創(chuàng)建的視圖進(jìn)行重命名。 語(yǔ)法格式:語(yǔ)法格式: sp_rename objnam

36、e = object_name , newname = new_name , objtype = object_type EXEC sp_rename V_全體教師信息全體教師信息, 全體教師信息全體教師信息_VIEW 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1926 3 3刪除視圖刪除視圖 從當(dāng)前數(shù)據(jù)庫(kù)中刪除一個(gè)或多個(gè)視圖??蓤?zhí)行從當(dāng)前數(shù)據(jù)庫(kù)中刪除一個(gè)或多個(gè)視圖??蓤?zhí)行DROP VIEW語(yǔ)句。語(yǔ)句。 語(yǔ)法格式:語(yǔ)法格式: DROP VIEW View_name ,.n 【例】下例刪除【例】下例刪除“V_V_學(xué)生平均成績(jī)

37、學(xué)生平均成績(jī)”視圖。視圖。 USE 教學(xué)管理教學(xué)管理 IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = V_學(xué)生平均成績(jī)學(xué)生平均成績(jī)) DROP VIEW V_學(xué)生平均成績(jī)學(xué)生平均成績(jī) GO 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1927 9.2.4 9.2.4 查詢(xún)視圖查詢(xún)視圖 視圖定義后,用戶(hù)就可以象對(duì)基本表一樣對(duì)視圖進(jìn)視圖定義后,用戶(hù)就可以象對(duì)基本表一樣對(duì)視圖進(jìn) 行查詢(xún)了。行查詢(xún)了。 【例】如果要查詢(xún)信息學(xué)院

38、每個(gè)學(xué)生的情況,只用【例】如果要查詢(xún)信息學(xué)院每個(gè)學(xué)生的情況,只用 從視圖從視圖V_僅對(duì)信電學(xué)院僅對(duì)信電學(xué)院查詢(xún)即可。查詢(xún)即可。 SELECT * From V_僅對(duì)信電學(xué)院僅對(duì)信電學(xué)院 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1928 【例】創(chuàng)建信電學(xué)院每個(gè)學(xué)生的成績(jī)視圖,包括學(xué)生的學(xué)號(hào)、姓名、【例】創(chuàng)建信電學(xué)院每個(gè)學(xué)生的成績(jī)視圖,包括學(xué)生的學(xué)號(hào)、姓名、 所選課程號(hào)、課程名,成績(jī),并進(jìn)行查詢(xún)。所選課程號(hào)、課程名,成績(jī),并進(jìn)行查詢(xún)。 創(chuàng)建:創(chuàng)建: USE 教學(xué)管理教學(xué)管理 CREATE VIEW V_信電學(xué)生成績(jī)信電學(xué)生成

39、績(jī) (學(xué)號(hào)學(xué)號(hào),姓名姓名,開(kāi)課號(hào)開(kāi)課號(hào),課號(hào)課號(hào),課名課名,成績(jī)成績(jī)) AS SELECT S.學(xué)號(hào)學(xué)號(hào), 姓名姓名,O.開(kāi)課號(hào)開(kāi)課號(hào),C.課號(hào)課號(hào),課名課名,成績(jī)成績(jī) FROM 學(xué)生表學(xué)生表 S, 選課表選課表 E, 開(kāi)課表開(kāi)課表 O, 課程表課程表 C WHERE S.學(xué)號(hào)學(xué)號(hào)=E.學(xué)號(hào)學(xué)號(hào) AND E.開(kāi)課號(hào)開(kāi)課號(hào)=O.開(kāi)課號(hào)開(kāi)課號(hào) AND O.課號(hào)課號(hào)=C.課號(hào)課號(hào) AND 所在院系所在院系=信電學(xué)院信電學(xué)院 GO 查詢(xún):查詢(xún): SELECT * FROM V_信電學(xué)生成績(jī)信電學(xué)生成績(jī) SELECT * FROM V_信電學(xué)生成績(jī)信電學(xué)生成績(jī) where 學(xué)號(hào)學(xué)號(hào)=S060101 第第

40、9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1929 【例】創(chuàng)建每個(gè)學(xué)生平均成績(jī)的視圖,并瀏覽查詢(xún)?!纠縿?chuàng)建每個(gè)學(xué)生平均成績(jī)的視圖,并瀏覽查詢(xún)。 創(chuàng)建:創(chuàng)建: USE 教學(xué)管理教學(xué)管理 GO CREATE VIEW V_學(xué)生平均成績(jī)學(xué)生平均成績(jī) AS SELECT 學(xué)號(hào)學(xué)號(hào),AVG(成績(jī)成績(jī)) AS 平均成績(jī)平均成績(jī) FROM 選課表選課表 GROUP BY 學(xué)號(hào)學(xué)號(hào) 查詢(xún):查詢(xún): SELECT * FROM V_學(xué)生平均成績(jī)學(xué)生平均成績(jī) 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server

41、 2005 2021-6-1930 9.2.4 9.2.4 更新視圖更新視圖 更新視圖是指通過(guò)視圖來(lái)插入(更新視圖是指通過(guò)視圖來(lái)插入(INSERT)、刪除()、刪除(DELETE) 和修改(和修改(UPDATE)數(shù)據(jù)。由于視圖是不實(shí)際存儲(chǔ)數(shù)據(jù)的虛表,因)數(shù)據(jù)。由于視圖是不實(shí)際存儲(chǔ)數(shù)據(jù)的虛表,因 此對(duì)視圖的更新,最終要轉(zhuǎn)換為對(duì)基本表的更新。此對(duì)視圖的更新,最終要轉(zhuǎn)換為對(duì)基本表的更新。 為防止用戶(hù)通過(guò)視圖對(duì)數(shù)據(jù)進(jìn)行增加、刪除、修改時(shí),有意無(wú)為防止用戶(hù)通過(guò)視圖對(duì)數(shù)據(jù)進(jìn)行增加、刪除、修改時(shí),有意無(wú) 意地對(duì)不屬于視圖范圍內(nèi)的基本表數(shù)據(jù)進(jìn)行操作,可在定義視圖時(shí)意地對(duì)不屬于視圖范圍內(nèi)的基本表數(shù)據(jù)進(jìn)行操作,可

42、在定義視圖時(shí) 加上加上WITH CHECK OPTION子句。這樣在視圖上增刪改數(shù)據(jù)時(shí),子句。這樣在視圖上增刪改數(shù)據(jù)時(shí), DBMS會(huì)檢查視圖定義中的條件,若不滿(mǎn)足時(shí),則拒絕該操作。會(huì)檢查視圖定義中的條件,若不滿(mǎn)足時(shí),則拒絕該操作。 SQL Server以?xún)煞N方法增強(qiáng)可更新視圖的類(lèi)別:以?xún)煞N方法增強(qiáng)可更新視圖的類(lèi)別: uINSTEAD OF觸發(fā)器觸發(fā)器 u分區(qū)視圖分區(qū)視圖 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1931 前例中,前例中,V_V_僅對(duì)信電學(xué)院僅對(duì)信電學(xué)院是一可更新視圖,但由于視圖是一可更新視圖,但由于視圖

43、使用了使用了WITH CHECK OPTIONWITH CHECK OPTION選項(xiàng),只允許更新信息學(xué)院學(xué)生數(shù)據(jù)。選項(xiàng),只允許更新信息學(xué)院學(xué)生數(shù)據(jù)。 下面例子說(shuō)明,如果沒(méi)有下面例子說(shuō)明,如果沒(méi)有WITH CHECK OPTIONWITH CHECK OPTION選項(xiàng),則不能保護(hù)非選項(xiàng),則不能保護(hù)非 視圖數(shù)據(jù)庫(kù)被插入、修改和刪除。視圖數(shù)據(jù)庫(kù)被插入、修改和刪除。 首先,創(chuàng)建首先,創(chuàng)建會(huì)計(jì)學(xué)院會(huì)計(jì)學(xué)院學(xué)生視圖,不帶學(xué)生視圖,不帶WITH CHECK OPTION選選 項(xiàng)項(xiàng) 再用再用INSERT語(yǔ)句通過(guò)語(yǔ)句通過(guò)會(huì)計(jì)學(xué)院會(huì)計(jì)學(xué)院視圖插入一工商管理視圖插入一工商管理 學(xué)院的學(xué)生學(xué)院的學(xué)生 。也可以成功。也

44、可以成功。 說(shuō)明兩個(gè)數(shù)據(jù)確實(shí)插入基本表說(shuō)明兩個(gè)數(shù)據(jù)確實(shí)插入基本表 但從但從會(huì)計(jì)學(xué)院會(huì)計(jì)學(xué)院視圖查詢(xún),則只有新增的會(huì)計(jì)學(xué)院視圖查詢(xún),則只有新增的會(huì)計(jì)學(xué)院 學(xué)生,而沒(méi)有工商管理學(xué)院的學(xué)生。學(xué)生,而沒(méi)有工商管理學(xué)院的學(xué)生。 然后用然后用INSERT語(yǔ)句插入會(huì)計(jì)學(xué)院的學(xué)生元組??梢猿晒?。語(yǔ)句插入會(huì)計(jì)學(xué)院的學(xué)生元組??梢猿晒?。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1932 通過(guò)視圖對(duì)數(shù)據(jù)進(jìn)行更新與刪除時(shí)需要注意到以下幾通過(guò)視圖對(duì)數(shù)據(jù)進(jìn)行更新與刪除時(shí)需要注意到以下幾 個(gè)問(wèn)題:個(gè)問(wèn)題: (1 1)不帶)不帶with CHECK O

45、PTIONwith CHECK OPTION選項(xiàng)的視圖,能夠插入非選項(xiàng)的視圖,能夠插入非 視圖數(shù)據(jù),因?yàn)閿?shù)據(jù)最終存儲(chǔ)在視圖所引用的基本視圖數(shù)據(jù),因?yàn)閿?shù)據(jù)最終存儲(chǔ)在視圖所引用的基本 表,但插入后,不在視圖數(shù)據(jù)集,故無(wú)法通過(guò)視圖表,但插入后,不在視圖數(shù)據(jù)集,故無(wú)法通過(guò)視圖 查詢(xún)?cè)摂?shù)據(jù);如上例。查詢(xún)?cè)摂?shù)據(jù);如上例。 (2 2)執(zhí)行)執(zhí)行UPDATE DELETEUPDATE DELETE時(shí),所刪除與更新的數(shù)據(jù),必時(shí),所刪除與更新的數(shù)據(jù),必 須包含在視圖結(jié)果集中,否則失??;如上例要在視須包含在視圖結(jié)果集中,否則失??;如上例要在視 圖中刪除新增工商管理學(xué)院的學(xué)生就會(huì)刪除失敗。圖中刪除新增工商管理學(xué)院的學(xué)

46、生就會(huì)刪除失敗。 (3 3)如果視圖引用多個(gè)表時(shí),則無(wú)法用)如果視圖引用多個(gè)表時(shí),則無(wú)法用DELETEDELETE、 UPDATEUPDATE、INSERTINSERT命令直接對(duì)視圖更新,但可以通過(guò)命令直接對(duì)視圖更新,但可以通過(guò) 替代觸發(fā)器進(jìn)行更新。替代觸發(fā)器進(jìn)行更新。 (4 4)如果視圖包含有聚合函數(shù),)如果視圖包含有聚合函數(shù),GROUP BYGROUP BY子句等,則子句等,則 不能對(duì)視圖直接更新。不能對(duì)視圖直接更新。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1933 視圖視圖V_信電學(xué)生成績(jī)引用了多個(gè)表,不能對(duì)視圖

47、直接信電學(xué)生成績(jī)引用了多個(gè)表,不能對(duì)視圖直接 刪除。刪除。 delete FROM V_信電學(xué)生成績(jī)信電學(xué)生成績(jī) where 學(xué)號(hào)學(xué)號(hào)=S060101 AND 開(kāi)課號(hào)開(kāi)課號(hào)=010201 -返回出錯(cuò)信息:返回出錯(cuò)信息: * 服務(wù)器服務(wù)器: 消息消息 4405,級(jí)別,級(jí)別 16,狀態(tài),狀態(tài) 1,行,行 1 視圖或函數(shù)視圖或函數(shù) V_信電學(xué)生成績(jī)信電學(xué)生成績(jī) 不可更新,因?yàn)樾薷臅?huì)不可更新,因?yàn)樾薷臅?huì) 影響多個(gè)基表。影響多個(gè)基表。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1934 視圖視圖“V_學(xué)生平均成績(jī)學(xué)生平均成績(jī)” ”

48、包含有聚合函數(shù),還有包含有聚合函數(shù),還有 GROUP BY子句,因此不能對(duì)視圖直接刪除。子句,因此不能對(duì)視圖直接刪除。 DELETE FROM V_學(xué)生平均成績(jī)學(xué)生平均成績(jī) WHERE 學(xué)號(hào)學(xué)號(hào)=S060101 -顯示結(jié)果:顯示結(jié)果: 消息消息4403,級(jí)別,級(jí)別16,狀態(tài),狀態(tài)1,第,第1 行行 無(wú)法更新視圖或函數(shù)無(wú)法更新視圖或函數(shù)V_V_學(xué)生平均成績(jī)學(xué)生平均成績(jī) ,因?yàn)樗?,因?yàn)樗?聚合或聚合或DISTINCT DISTINCT 子句。子句。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1935 9.2.5 特殊類(lèi)

49、型視圖簡(jiǎn)介特殊類(lèi)型視圖簡(jiǎn)介 上面例子中所介紹的視圖均為標(biāo)準(zhǔn)視圖,這些視圖上上面例子中所介紹的視圖均為標(biāo)準(zhǔn)視圖,這些視圖上 定義的查詢(xún)語(yǔ)句是由簡(jiǎn)單的定義的查詢(xún)語(yǔ)句是由簡(jiǎn)單的SELECTSELECT組成,并且其結(jié)果組成,并且其結(jié)果 集是通過(guò)查詢(xún)基本表來(lái)動(dòng)態(tài)實(shí)現(xiàn)的。下面介紹集是通過(guò)查詢(xún)基本表來(lái)動(dòng)態(tài)實(shí)現(xiàn)的。下面介紹SQL SQL ServerServer所支持的集中特殊類(lèi)型視圖,它們是所支持的集中特殊類(lèi)型視圖,它們是 索引視圖:建立唯一聚簇索引的視圖為索引視圖。索引視圖:建立唯一聚簇索引的視圖為索引視圖。 分區(qū)視圖:分區(qū)視圖是通過(guò)對(duì)具有相同結(jié)構(gòu)的成員分區(qū)視圖:分區(qū)視圖是通過(guò)對(duì)具有相同結(jié)構(gòu)的成員 表使用

50、表使用UNION ALL 所定義的視圖。所定義的視圖。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作 大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1936 1索引視圖索引視圖 標(biāo)準(zhǔn)視圖是在執(zhí)行了引用了視圖的查詢(xún)時(shí)標(biāo)準(zhǔn)視圖是在執(zhí)行了引用了視圖的查詢(xún)時(shí),SQL SQL Server Server 才把相關(guān)的基本表中的數(shù)據(jù)合并成視圖的邏輯才把相關(guān)的基本表中的數(shù)據(jù)合并成視圖的邏輯 結(jié)構(gòu),那么當(dāng)查詢(xún)所引用的視圖包含大量的數(shù)據(jù)行或結(jié)構(gòu),那么當(dāng)查詢(xún)所引用的視圖包含大量的數(shù)據(jù)行或 涉及到對(duì)大量數(shù)據(jù)行進(jìn)行合計(jì)運(yùn)算或連接操作,毋庸涉及到對(duì)大量數(shù)據(jù)行進(jìn)行合計(jì)運(yùn)算或連接操作,毋庸 置疑,動(dòng)態(tài)地

51、創(chuàng)建視圖結(jié)果集將給系統(tǒng)帶來(lái)沉重的負(fù)置疑,動(dòng)態(tài)地創(chuàng)建視圖結(jié)果集將給系統(tǒng)帶來(lái)沉重的負(fù) 擔(dān),尤其是經(jīng)常引用這種大容量視圖。擔(dān),尤其是經(jīng)常引用這種大容量視圖。 解決這一令人頭痛問(wèn)題的方法就是為視圖創(chuàng)建唯一解決這一令人頭痛問(wèn)題的方法就是為視圖創(chuàng)建唯一 聚簇索引,即在視圖上創(chuàng)建唯一聚集索引時(shí)生成該視聚簇索引,即在視圖上創(chuàng)建唯一聚集索引時(shí)生成該視 圖的結(jié)果集,并將結(jié)果集數(shù)據(jù)與有聚簇索引的表的數(shù)圖的結(jié)果集,并將結(jié)果集數(shù)據(jù)與有聚簇索引的表的數(shù) 據(jù)集一樣存儲(chǔ)在數(shù)據(jù)中的。據(jù)集一樣存儲(chǔ)在數(shù)據(jù)中的。 建立唯一聚簇索引的視圖稱(chēng)做索引視圖。建立唯一聚簇索引的視圖稱(chēng)做索引視圖。 第第9章章 視圖的規(guī)劃與操作視圖的規(guī)劃與操作

52、大型數(shù)據(jù)庫(kù)大型數(shù)據(jù)庫(kù) SQL Server 2005 2021-6-1937 【例】創(chuàng)建學(xué)生選課情況的匯總索引視圖?!纠縿?chuàng)建學(xué)生選課情況的匯總索引視圖。 首先需要進(jìn)行首先需要進(jìn)行SETSET設(shè)置,其次因?yàn)槌煽?jī)字段中有設(shè)置,其次因?yàn)槌煽?jī)字段中有NULLNULL,索引視圖,索引視圖 不允許使用不允許使用SUMSUM對(duì)具有空值的列進(jìn)行求和,所以使用對(duì)具有空值的列進(jìn)行求和,所以使用ISNULLISNULL將空將空 值變?yōu)橹底優(yōu)? 0值。值。 SET ANSI_NULLS ON SET ANSI_PADDING ON SET ANSI_WARNINGS ON SET CONCAT_NULL_YIELDS_NULL ON SET NUMERIC_ROUNDABORT OFF SET QUOTED_IDENTIFIER ON SET ARITHABORT ON -SET設(shè)置可只進(jìn)行一次。設(shè)置可只進(jìn)行一次。 第第9章章 視圖的規(guī)劃與操作視圖

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論