




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、11第第8章章 索引與視圖索引與視圖22本章內(nèi)容本章內(nèi)容n 8.1 使用索引使用索引n 8.2 使用視圖使用視圖338.1 使用索引使用索引索引是與表或視圖關(guān)聯(lián)的磁盤上結(jié)構(gòu),索引中的鍵存儲(chǔ)索引是與表或視圖關(guān)聯(lián)的磁盤上結(jié)構(gòu),索引中的鍵存儲(chǔ)在一個(gè)結(jié)構(gòu)中,使在一個(gè)結(jié)構(gòu)中,使SQL Server可以快速有效地查找與鍵值關(guān)可以快速有效地查找與鍵值關(guān)聯(lián)的行。聯(lián)的行。 建立索引的優(yōu)點(diǎn):建立索引的優(yōu)點(diǎn):索引可以減少為返回查詢結(jié)果集而必須讀取的數(shù)據(jù)量;索引可以減少為返回查詢結(jié)果集而必須讀取的數(shù)據(jù)量;索引還可以強(qiáng)制表中的行具有唯一性,從而確保表數(shù)據(jù)的數(shù)索引還可以強(qiáng)制表中的行具有唯一性,從而確保表數(shù)據(jù)的數(shù)據(jù)完整性;
2、使用索引可以快速找到表或索引視圖中的特定信據(jù)完整性;使用索引可以快速找到表或索引視圖中的特定信息息 。448.1 使用索引使用索引n 索引的分類索引的分類表或視圖的索引可以包括以下幾類:表或視圖的索引可以包括以下幾類:(1) 惟一索引惟一索引在表中建立惟一性索引時(shí),組成該索引的字段或字段組在表中建立惟一性索引時(shí),組成該索引的字段或字段組合在表中具有惟一值,也就是說,對(duì)于表中的任何兩行記錄合在表中具有惟一值,也就是說,對(duì)于表中的任何兩行記錄來說,索引鍵的值都是各不相同。來說,索引鍵的值都是各不相同。 558.1 使用索引使用索引(2) 聚集索引聚集索引聚集索引根據(jù)數(shù)據(jù)行的鍵值在表或視圖中排序和存
3、儲(chǔ)這聚集索引根據(jù)數(shù)據(jù)行的鍵值在表或視圖中排序和存儲(chǔ)這些數(shù)據(jù)行,即聚集索引決定了數(shù)據(jù)的物理順序。只有在表中些數(shù)據(jù)行,即聚集索引決定了數(shù)據(jù)的物理順序。只有在表中建立了一個(gè)聚集索引后,數(shù)據(jù)才會(huì)按照索引鍵值指定的順序建立了一個(gè)聚集索引后,數(shù)據(jù)才會(huì)按照索引鍵值指定的順序存儲(chǔ)到表中。由于一個(gè)表中的數(shù)據(jù)只能按照一種順序來存儲(chǔ),存儲(chǔ)到表中。由于一個(gè)表中的數(shù)據(jù)只能按照一種順序來存儲(chǔ),所以在一個(gè)表中只能建立一個(gè)聚集索引。所以在一個(gè)表中只能建立一個(gè)聚集索引。 表具有聚集索引,則該表稱為聚集表。否則,其數(shù)據(jù)行表具有聚集索引,則該表稱為聚集表。否則,其數(shù)據(jù)行存儲(chǔ)在一個(gè)稱為堆的無序結(jié)構(gòu)中存儲(chǔ)在一個(gè)稱為堆的無序結(jié)構(gòu)中 。6
4、68.1 使用索引使用索引(3) 非聚集索引非聚集索引非聚集索引包含非聚集索引鍵值,并且每個(gè)鍵值項(xiàng)都有非聚集索引包含非聚集索引鍵值,并且每個(gè)鍵值項(xiàng)都有指向包含該鍵值的數(shù)據(jù)行的指針。具有獨(dú)立于數(shù)據(jù)行的結(jié)構(gòu)指向包含該鍵值的數(shù)據(jù)行的指針。具有獨(dú)立于數(shù)據(jù)行的結(jié)構(gòu) 。從非聚集索引中的索引行指向數(shù)據(jù)行的指針稱為行定位從非聚集索引中的索引行指向數(shù)據(jù)行的指針稱為行定位器。行定位器的結(jié)構(gòu)取決于數(shù)據(jù)頁是存儲(chǔ)在堆中還是聚集表器。行定位器的結(jié)構(gòu)取決于數(shù)據(jù)頁是存儲(chǔ)在堆中還是聚集表中。對(duì)于堆,行定位器是指向行的指針。對(duì)于聚集表,行定中。對(duì)于堆,行定位器是指向行的指針。對(duì)于聚集表,行定位器是聚集索引鍵。位器是聚集索引鍵。注
5、意:注意:聚集索引和非聚集索引都可以是唯一的,即任何兩行都聚集索引和非聚集索引都可以是唯一的,即任何兩行都不能有相同的索引鍵值不能有相同的索引鍵值 ;索引也可以不是唯一的,即多行可;索引也可以不是唯一的,即多行可以共享同一鍵值以共享同一鍵值 ;每當(dāng)修改了表數(shù)據(jù)后,都會(huì)自動(dòng)維護(hù)表或;每當(dāng)修改了表數(shù)據(jù)后,都會(huì)自動(dòng)維護(hù)表或視圖的索引視圖的索引 。 778.1 使用索引使用索引(4) 包含性列索引包含性列索引 一種非聚集索引,它擴(kuò)展后不僅包含鍵列,還包含非鍵一種非聚集索引,它擴(kuò)展后不僅包含鍵列,還包含非鍵列列 。(5) 索引視圖索引視圖 視圖的索引將具體化視圖的索引將具體化(執(zhí)行執(zhí)行)視圖,并將結(jié)果集
6、永久存儲(chǔ)在視圖,并將結(jié)果集永久存儲(chǔ)在唯一的聚集索引中,而且其存儲(chǔ)方法與帶聚集索引的表的存唯一的聚集索引中,而且其存儲(chǔ)方法與帶聚集索引的表的存儲(chǔ)方法相同。創(chuàng)建聚集索引后,可以為視圖添加非聚集索引。儲(chǔ)方法相同。創(chuàng)建聚集索引后,可以為視圖添加非聚集索引。888.1 使用索引使用索引(6) 全文索引全文索引 一種特殊類型的基于標(biāo)記的功能性索引,由一種特殊類型的基于標(biāo)記的功能性索引,由Microsoft SQL Server全文引擎全文引擎(MSFTESQL)服務(wù)創(chuàng)建和維護(hù),用于幫服務(wù)創(chuàng)建和維護(hù),用于幫助在字符串?dāng)?shù)據(jù)中搜索復(fù)雜的詞。助在字符串?dāng)?shù)據(jù)中搜索復(fù)雜的詞。(7) XML索引索引 xml數(shù)據(jù)類型列中
7、數(shù)據(jù)類型列中XML二進(jìn)制大型對(duì)象的已拆分持久表二進(jìn)制大型對(duì)象的已拆分持久表示形式示形式 。注意:注意:對(duì)表中的列定義了對(duì)表中的列定義了PRIMARY KEY約束和約束和UNIQUE約束約束時(shí),會(huì)自動(dòng)創(chuàng)建索引。時(shí),會(huì)自動(dòng)創(chuàng)建索引。 998.1 使用索引使用索引n 索引設(shè)計(jì)準(zhǔn)則索引設(shè)計(jì)準(zhǔn)則 要設(shè)計(jì)出好的索引集,需要了解數(shù)據(jù)庫、查詢和數(shù)據(jù)列要設(shè)計(jì)出好的索引集,需要了解數(shù)據(jù)庫、查詢和數(shù)據(jù)列的特征的特征 。(1) 數(shù)據(jù)庫準(zhǔn)則數(shù)據(jù)庫準(zhǔn)則 避免對(duì)經(jīng)常更新的表創(chuàng)建過多的索引,并且列要盡可能避免對(duì)經(jīng)常更新的表創(chuàng)建過多的索引,并且列要盡可能少;使用多個(gè)索引可以提高更新少而數(shù)據(jù)量大的查詢的性能。少;使用多個(gè)索引可以
8、提高更新少而數(shù)據(jù)量大的查詢的性能。 對(duì)小表進(jìn)行索引可能不會(huì)產(chǎn)生優(yōu)化效果對(duì)小表進(jìn)行索引可能不會(huì)產(chǎn)生優(yōu)化效果 。 當(dāng)視圖包含聚合、表聯(lián)接或聚合和聯(lián)接的組合時(shí),視圖當(dāng)視圖包含聚合、表聯(lián)接或聚合和聯(lián)接的組合時(shí),視圖的索引可以顯著地提升性能的索引可以顯著地提升性能 。 10108.1 使用索引使用索引(2) 查詢準(zhǔn)則查詢準(zhǔn)則 為經(jīng)常用于查詢中的謂詞和聯(lián)接條件的所有列創(chuàng)建非聚為經(jīng)常用于查詢中的謂詞和聯(lián)接條件的所有列創(chuàng)建非聚集索引。集索引。 涵蓋索引可以提高查詢性能,因?yàn)榉喜樵円蟮娜亢w索引可以提高查詢性能,因?yàn)榉喜樵円蟮娜繑?shù)據(jù)都存在于索引本身中數(shù)據(jù)都存在于索引本身中 。 將插入或修改盡可能多的
9、行的查詢寫入單個(gè)語句內(nèi),而將插入或修改盡可能多的行的查詢寫入單個(gè)語句內(nèi),而不要使用多個(gè)查詢更新相同的行。不要使用多個(gè)查詢更新相同的行。 評(píng)估查詢類型以及如何在查詢中使用列評(píng)估查詢類型以及如何在查詢中使用列 。例如,在完全。例如,在完全匹配查詢類型中使用的列就適合用于非聚集索引或聚集索引。匹配查詢類型中使用的列就適合用于非聚集索引或聚集索引。11118.1 使用索引使用索引(3) 列準(zhǔn)則列準(zhǔn)則 對(duì)于聚集索引,應(yīng)保持較短的索引鍵長(zhǎng)度。另外,對(duì)唯對(duì)于聚集索引,應(yīng)保持較短的索引鍵長(zhǎng)度。另外,對(duì)唯一列或非空列創(chuàng)建聚集索引可以使聚集索引效率高一列或非空列創(chuàng)建聚集索引可以使聚集索引效率高 . 不能將不能將n
10、text、text、image、varchar(max)、nvarchar(max)和和varbinary(max)數(shù)據(jù)類型的列指定為索引鍵數(shù)據(jù)類型的列指定為索引鍵列列 ,不過,不過,varchar(max)、nvarchar(max)、varbinary(max)和和xml數(shù)據(jù)類型的列可以作為非鍵索引列參與非聚集索引。數(shù)據(jù)類型的列可以作為非鍵索引列參與非聚集索引。 xml數(shù)據(jù)類型的列只能在數(shù)據(jù)類型的列只能在XML索引中用作鍵列索引中用作鍵列 。 12128.1 使用索引使用索引 如果索引包含多個(gè)列,則應(yīng)考慮列的順序如果索引包含多個(gè)列,則應(yīng)考慮列的順序 。用于等于用于等于 (=)、大于、大于
11、()、小于、小于 () 或或BETWEEN搜索條件搜索條件的的WHERE子句或者參與聯(lián)接的列應(yīng)該放在最前面。其他列子句或者參與聯(lián)接的列應(yīng)該放在最前面。其他列應(yīng)該基于其非重復(fù)級(jí)別進(jìn)行排序,就是說,從最不重復(fù)的列應(yīng)該基于其非重復(fù)級(jí)別進(jìn)行排序,就是說,從最不重復(fù)的列到最重復(fù)的列。到最重復(fù)的列。 考慮對(duì)計(jì)算列進(jìn)行索引考慮對(duì)計(jì)算列進(jìn)行索引 。13138.1 使用索引使用索引(4) 索引特征索引特征在確定某一索引適合某一查詢之后,可以選擇最適合具在確定某一索引適合某一查詢之后,可以選擇最適合具體情況的索引類型。創(chuàng)建索引時(shí)需確定以下選項(xiàng)。體情況的索引類型。創(chuàng)建索引時(shí)需確定以下選項(xiàng)。 聚集還是非聚集聚集還是非
12、聚集 唯一還是非唯一唯一還是非唯一 單列還是多列單列還是多列 索引中的列是升序排序還是降序排序索引中的列是升序排序還是降序排序 14148.1 使用索引使用索引n 創(chuàng)建索引創(chuàng)建索引1. 創(chuàng)建索引步驟如下:創(chuàng)建索引步驟如下:(1) 設(shè)計(jì)索引設(shè)計(jì)索引 索引設(shè)計(jì)包括確定要使用的列,選擇索引類型索引設(shè)計(jì)包括確定要使用的列,選擇索引類型(例如聚集例如聚集或非聚集或非聚集),選擇適當(dāng)?shù)乃饕x項(xiàng),以及確定文件組或分區(qū),選擇適當(dāng)?shù)乃饕x項(xiàng),以及確定文件組或分區(qū)方案布置方案布置 。(2) 確定最佳的創(chuàng)建方法確定最佳的創(chuàng)建方法 使用使用CREATE TABLE或或ALTER TABLE對(duì)列定義對(duì)列定義PRIMAR
13、Y KEY或或UNIQUE約束。約束。15158.1 使用索引使用索引默認(rèn)情況下,創(chuàng)建的唯一聚集索引可以強(qiáng)制默認(rèn)情況下,創(chuàng)建的唯一聚集索引可以強(qiáng)制PRIMARY KEY約束,除非表中已存在聚集索引或指定了唯一的非聚集約束,除非表中已存在聚集索引或指定了唯一的非聚集索引。默認(rèn)情況下,創(chuàng)建的唯一非聚集索引可以強(qiáng)制索引。默認(rèn)情況下,創(chuàng)建的唯一非聚集索引可以強(qiáng)制UNIQUE約束,除非已明確指定唯一的聚集索引且表中不存約束,除非已明確指定唯一的聚集索引且表中不存在聚集索引。在聚集索引。 使用使用CREATE INDEX語句或語句或SQL Server Management Studio對(duì)象資源管理器中的
14、對(duì)象資源管理器中的“新建索引新建索引”對(duì)話框創(chuàng)建獨(dú)立于對(duì)話框創(chuàng)建獨(dú)立于約束的索引約束的索引 。必須指定索引的名稱、表以及應(yīng)用該索引的列。還可以必須指定索引的名稱、表以及應(yīng)用該索引的列。還可以指定索引選項(xiàng)和索引位置、文件組或分區(qū)方案。默認(rèn)情況下,指定索引選項(xiàng)和索引位置、文件組或分區(qū)方案。默認(rèn)情況下,如果未指定聚集或唯一選項(xiàng),將創(chuàng)建非聚集的非唯一索引如果未指定聚集或唯一選項(xiàng),將創(chuàng)建非聚集的非唯一索引 16168.1 使用索引使用索引(3) 創(chuàng)建索引創(chuàng)建索引一個(gè)重要因素需要考慮:是對(duì)空表還是對(duì)包含數(shù)據(jù)的表一個(gè)重要因素需要考慮:是對(duì)空表還是對(duì)包含數(shù)據(jù)的表創(chuàng)建索引。對(duì)空表創(chuàng)建索引在創(chuàng)建索引時(shí)不會(huì)對(duì)性能產(chǎn)
15、生任創(chuàng)建索引。對(duì)空表創(chuàng)建索引在創(chuàng)建索引時(shí)不會(huì)對(duì)性能產(chǎn)生任何影響,而向表中添加數(shù)據(jù)時(shí),會(huì)對(duì)性能產(chǎn)生影響。何影響,而向表中添加數(shù)據(jù)時(shí),會(huì)對(duì)性能產(chǎn)生影響。創(chuàng)建索引后,索引將自動(dòng)啟用并可以使用??梢酝ㄟ^禁創(chuàng)建索引后,索引將自動(dòng)啟用并可以使用??梢酝ㄟ^禁用索引來刪除對(duì)該索引的訪問。用索引來刪除對(duì)該索引的訪問。17178.1 使用索引使用索引2. 創(chuàng)建聚集索引創(chuàng)建聚集索引用途:聚集索引可以提高查詢性能,還可以按需重新生用途:聚集索引可以提高查詢性能,還可以按需重新生成或重新組織來控制表碎片,所以除了個(gè)別表之外,每個(gè)表成或重新組織來控制表碎片,所以除了個(gè)別表之外,每個(gè)表都應(yīng)該有聚集索引。也可以對(duì)視圖創(chuàng)建聚集
16、索引都應(yīng)該有聚集索引。也可以對(duì)視圖創(chuàng)建聚集索引 。聚集索引按下列方式實(shí)現(xiàn)聚集索引按下列方式實(shí)現(xiàn) : PRIMARY KEY和和UNIQUE約束約束在創(chuàng)建在創(chuàng)建PRIMARY KEY約束時(shí),如果不存在該表的聚集約束時(shí),如果不存在該表的聚集索引且未指定唯一非聚集索引,則將自動(dòng)對(duì)一列或多列創(chuàng)建索引且未指定唯一非聚集索引,則將自動(dòng)對(duì)一列或多列創(chuàng)建唯一聚集索引。主鍵列不允許空值。唯一聚集索引。主鍵列不允許空值。在創(chuàng)建在創(chuàng)建UNIQUE約束時(shí),默認(rèn)情況下將創(chuàng)建唯一非聚集約束時(shí),默認(rèn)情況下將創(chuàng)建唯一非聚集索引,以便強(qiáng)制索引,以便強(qiáng)制UNIQUE約束。如果不存在該表的聚集索引,約束。如果不存在該表的聚集索引,
17、則可以指定唯一聚集索引。則可以指定唯一聚集索引。18188.1 使用索引使用索引將索引創(chuàng)建為約束的一部分后,會(huì)自動(dòng)將索引命名為與將索引創(chuàng)建為約束的一部分后,會(huì)自動(dòng)將索引命名為與約束名稱相同的名稱。約束名稱相同的名稱。 獨(dú)立于約束的索引獨(dú)立于約束的索引 指定非聚集主鍵約束后,可以對(duì)非主鍵列的列創(chuàng)建聚集指定非聚集主鍵約束后,可以對(duì)非主鍵列的列創(chuàng)建聚集索引索引 索引視圖索引視圖若要?jiǎng)?chuàng)建索引視圖,需要對(duì)一個(gè)或多個(gè)視圖列定義唯一若要?jiǎng)?chuàng)建索引視圖,需要對(duì)一個(gè)或多個(gè)視圖列定義唯一聚集索引。視圖將具體化,并且結(jié)果集存儲(chǔ)在該索引的頁級(jí)聚集索引。視圖將具體化,并且結(jié)果集存儲(chǔ)在該索引的頁級(jí)別中,其存儲(chǔ)方式與表數(shù)據(jù)存
18、儲(chǔ)在聚集索引中的方式相同別中,其存儲(chǔ)方式與表數(shù)據(jù)存儲(chǔ)在聚集索引中的方式相同 。19198.1 使用索引使用索引3. 創(chuàng)建非聚集索引創(chuàng)建非聚集索引通常,創(chuàng)建非聚集索引是為了提高聚集索引未包含的常通常,創(chuàng)建非聚集索引是為了提高聚集索引未包含的常用查詢的性能。用查詢的性能??梢酝ㄟ^下列方法實(shí)現(xiàn)非聚集索引可以通過下列方法實(shí)現(xiàn)非聚集索引 : PRIMARY KEY和和UNIQUE約束約束 獨(dú)立于約束的索引:默認(rèn)情況下,如果未指定聚集,將獨(dú)立于約束的索引:默認(rèn)情況下,如果未指定聚集,將創(chuàng)建非聚集索引創(chuàng)建非聚集索引 。 索引視圖的非聚集索引:對(duì)視圖創(chuàng)建唯一的聚集索引后,索引視圖的非聚集索引:對(duì)視圖創(chuàng)建唯一的
19、聚集索引后,便可以創(chuàng)建非聚集索引便可以創(chuàng)建非聚集索引 。20208.1 使用索引使用索引4. 創(chuàng)建唯一索引創(chuàng)建唯一索引創(chuàng)建唯一索引可以確保任何生成重復(fù)鍵值的嘗試都會(huì)失創(chuàng)建唯一索引可以確保任何生成重復(fù)鍵值的嘗試都會(huì)失敗。創(chuàng)建敗。創(chuàng)建UNIQUE約束和創(chuàng)建與約束無關(guān)的唯一索引并沒有約束和創(chuàng)建與約束無關(guān)的唯一索引并沒有明顯的區(qū)別明顯的區(qū)別 。唯一索引可通過以下方式實(shí)現(xiàn)唯一索引可通過以下方式實(shí)現(xiàn) : PRIMARY KEY或或UNIQUE約束約束 獨(dú)立于約束的索引:可以為一個(gè)表定義多個(gè)唯一非聚集獨(dú)立于約束的索引:可以為一個(gè)表定義多個(gè)唯一非聚集索引索引 索引視圖索引視圖如果在鍵列中存在重復(fù)值,將無法創(chuàng)建
20、唯一索引或約束如果在鍵列中存在重復(fù)值,將無法創(chuàng)建唯一索引或約束 21218.1 使用索引使用索引5. 使用使用Transact-SQL語句創(chuàng)建索引語句創(chuàng)建索引 使用使用CREATE INDEX語句可以創(chuàng)建索引,語法格式如下語句可以創(chuàng)建索引,語法格式如下 CREATE UNIQUE CLUSTERED | NONCLUSTERED INDEX index_name ON ( column ASC | DESC ,.n ) ; := database_name. schema_name . | schema_name. table_or_view_name22228.1 使用索引使用索引 UNIQ
21、UE:為表或視圖創(chuàng)建唯一索引。:為表或視圖創(chuàng)建唯一索引。唯一索引不允許兩行具有相同的索引鍵值。視圖的聚集唯一索引不允許兩行具有相同的索引鍵值。視圖的聚集索引必須唯一。索引必須唯一。 CLUSTERED:為表或視圖創(chuàng)建聚集索引:為表或視圖創(chuàng)建聚集索引 。一個(gè)表或視圖只允許同時(shí)有一個(gè)聚集索引。為一個(gè)視圖一個(gè)表或視圖只允許同時(shí)有一個(gè)聚集索引。為一個(gè)視圖創(chuàng)建唯一聚集索引會(huì)在物理上具體化該視圖。必須先為視圖創(chuàng)建唯一聚集索引會(huì)在物理上具體化該視圖。必須先為視圖創(chuàng)建唯一聚集索引,然后才能為該視圖定義其他索引創(chuàng)建唯一聚集索引,然后才能為該視圖定義其他索引 。 NONCLUSTERED:為表或視圖創(chuàng)建非聚集索引
22、:為表或視圖創(chuàng)建非聚集索引 。對(duì)。對(duì)于非聚集索引,數(shù)據(jù)行的物理排序獨(dú)立于索引排序于非聚集索引,數(shù)據(jù)行的物理排序獨(dú)立于索引排序 。每個(gè)表。每個(gè)表都最多可包含都最多可包含249個(gè)非聚集索引個(gè)非聚集索引 。默認(rèn)值為默認(rèn)值為NONCLUSTERED 23238.1 使用索引使用索引 index_name:索引的名稱:索引的名稱 。在表或視圖中必須唯一,但在數(shù)據(jù)庫中不必唯一。索引在表或視圖中必須唯一,但在數(shù)據(jù)庫中不必唯一。索引名稱必須符合標(biāo)識(shí)符的規(guī)則名稱必須符合標(biāo)識(shí)符的規(guī)則 。主主XML索引名不得以索引名不得以#、#、 或或字符開頭。字符開頭。 column:索引所基于的一列或多列:索引所基于的一列或多
23、列 。指定兩個(gè)或多個(gè)列名,可為指定列的組合值創(chuàng)建組合索指定兩個(gè)或多個(gè)列名,可為指定列的組合值創(chuàng)建組合索引。在引。在table_or_view_name后的括號(hào)中,按排序優(yōu)先級(jí)列出后的括號(hào)中,按排序優(yōu)先級(jí)列出組合索引中要包括的列組合索引中要包括的列 。一個(gè)組合索引鍵中最多可組合一個(gè)組合索引鍵中最多可組合16列。組合索引鍵中的所列。組合索引鍵中的所有列必須在同一個(gè)表或視圖中有列必須在同一個(gè)表或視圖中 。24248.1 使用索引使用索引 ASC | DESC :確定特定索引列的升序或降序排序方式。:確定特定索引列的升序或降序排序方式。默認(rèn)值為默認(rèn)值為ASC 。 :要為其建立索引的完全限定對(duì)象或非完全
24、限:要為其建立索引的完全限定對(duì)象或非完全限定對(duì)象。其中選項(xiàng)含義同其他命令。定對(duì)象。其中選項(xiàng)含義同其他命令。例如:創(chuàng)建簡(jiǎn)單非聚集索引。以下示例為例如:創(chuàng)建簡(jiǎn)單非聚集索引。以下示例為teaching數(shù)據(jù)庫數(shù)據(jù)庫中中student表的表的AGE列創(chuàng)建非聚集索引。列創(chuàng)建非聚集索引。USE teachingGOCREATE INDEX IX_age ON student (AGE)GO執(zhí)行結(jié)果如圖執(zhí)行結(jié)果如圖8.1所示。所示。25258.1 使用索引使用索引6. 使用圖形工具創(chuàng)建索引使用圖形工具創(chuàng)建索引 具體步驟詳見教材具體步驟詳見教材26268.1 使用索引使用索引n 修改索引修改索引1. 禁止索引禁
25、止索引索引定義保留在元數(shù)據(jù)中,非聚集索引的索引統(tǒng)計(jì)信息索引定義保留在元數(shù)據(jù)中,非聚集索引的索引統(tǒng)計(jì)信息仍保留。對(duì)視圖禁用非聚集索引或聚集索引會(huì)以物理方式刪仍保留。對(duì)視圖禁用非聚集索引或聚集索引會(huì)以物理方式刪除索引數(shù)據(jù)。禁用表的聚集索引可以防止對(duì)數(shù)據(jù)的訪問,數(shù)除索引數(shù)據(jù)。禁用表的聚集索引可以防止對(duì)數(shù)據(jù)的訪問,數(shù)據(jù)仍保留在表中,但在刪除或重新生成索引之前,無法對(duì)這據(jù)仍保留在表中,但在刪除或重新生成索引之前,無法對(duì)這些數(shù)據(jù)執(zhí)行些數(shù)據(jù)執(zhí)行DML操作。操作。 在以下情況中可能禁用一個(gè)或多個(gè)索引在以下情況中可能禁用一個(gè)或多個(gè)索引 :(1) SQL Server 2005 Database Engine在在
26、SQL Server升級(jí)升級(jí)期間自動(dòng)禁用索引期間自動(dòng)禁用索引 。(2) 使用使用ALTER INDEX手動(dòng)禁用索引手動(dòng)禁用索引 。27278.1 使用索引使用索引ALTER INDEX命令語句的語法格式如下:命令語句的語法格式如下: ALTER INDEX index_name | ALL ON DISABLE各選項(xiàng)含義如下:各選項(xiàng)含義如下: ALL:指定與表或視圖相關(guān)聯(lián)的所有索引,而不考慮索:指定與表或視圖相關(guān)聯(lián)的所有索引,而不考慮索引類型。引類型。 DISABLE:將索引標(biāo)記為禁用,從而不能由:將索引標(biāo)記為禁用,從而不能由SQL Server 2005 Database Engine使用使
27、用 。已禁用索引的索引定義保留在沒有基礎(chǔ)索引數(shù)據(jù)的系統(tǒng)已禁用索引的索引定義保留在沒有基礎(chǔ)索引數(shù)據(jù)的系統(tǒng)目錄中目錄中 。禁用聚集索引將阻止用戶訪問基礎(chǔ)表數(shù)據(jù)。禁用聚集索引將阻止用戶訪問基礎(chǔ)表數(shù)據(jù)。28288.1 使用索引使用索引例如:禁用索引。下面的示例禁用了對(duì)例如:禁用索引。下面的示例禁用了對(duì)course表的表的IX_Cname索引。索引。USE teachingGOALTER INDEX IX_Cname ON course DISABLEGO29298.1 使用索引使用索引(3) 使用圖形工具禁用索引使用圖形工具禁用索引 具體步驟詳見教材具體步驟詳見教材30308.1 使用索引使用索引2.
28、 啟用索引啟用索引索引被禁用后一直保持禁用狀態(tài),直到它重新生成或刪索引被禁用后一直保持禁用狀態(tài),直到它重新生成或刪除除 ??梢允褂孟铝蟹椒ㄖ唬匦律山玫乃饕齺韱⒂盟?。可以使用下列方法之一,重新生成禁用的索引來啟用它。(1) 帶帶REBUILD子句的子句的ALTER INDEX語句語句 ALTER INDEX命令語句的語法格式如下。命令語句的語法格式如下。 ALTER INDEX index_name | ALL ON REBUILD31318.1 使用索引使用索引 REBUILD:指定將使用相同的列、索引類型、唯一性屬:指定將使用相同的列、索引類型、唯一性屬性和排序順序重新生成索引。性和
29、排序順序重新生成索引。REBUILD啟用已禁用的索引。啟用已禁用的索引。 例如:重新生成索引。以下示例在例如:重新生成索引。以下示例在Course表中重新生成表中重新生成索引索引IX_Cname。USE teachingGOALTER INDEX IX_Cname ON course REBUILDGO32328.1 使用索引使用索引(2) 使用圖形工具啟用索引使用圖形工具啟用索引 具體步驟詳見教材具體步驟詳見教材33338.1 使用索引使用索引3. 重命名索引重命名索引重命名索引將用提供的新名稱替換當(dāng)前的索引名稱重命名索引將用提供的新名稱替換當(dāng)前的索引名稱 。(1) 使用使用sp_renam
30、e系統(tǒng)過程重命名索引系統(tǒng)過程重命名索引 sp_rename系統(tǒng)過程的語法格式如下。系統(tǒng)過程的語法格式如下。 sp_rename objname = object_name , newname = new_name , objtype = object_type 34348.1 使用索引使用索引 objname = object_name:用戶對(duì)象或數(shù)據(jù)類型的:用戶對(duì)象或數(shù)據(jù)類型的當(dāng)前限定或非限定名稱當(dāng)前限定或非限定名稱 。如果要重命名的對(duì)象是表中的列,則如果要重命名的對(duì)象是表中的列,則object_name的格式的格式必須是必須是table.column。如果要重命名的對(duì)象是索引,則。如果要重
31、命名的對(duì)象是索引,則object_name的格式必須是的格式必須是table.index。 newname = new_name:指定對(duì)象的新名稱:指定對(duì)象的新名稱 。new_name的數(shù)據(jù)類型為的數(shù)據(jù)類型為sysname,無默認(rèn)值,無默認(rèn)值 。 objtype = object_type:要重命名的對(duì)象的類型:要重命名的對(duì)象的類型 。object_type的數(shù)據(jù)類型為的數(shù)據(jù)類型為 varchar(13),默認(rèn)值為,默認(rèn)值為NULL,可取可取COLUMN、DATABASE、INDEX、OBJECT、USERDATATYPE,具體見表,具體見表8.1。35358.1 使用索引使用索引例如:重命名
32、索引。以下示例將例如:重命名索引。以下示例將course表中的表中的IX_Cname索引重命名為索引重命名為IX_Course_Cname。USE teachingGOEXEC sp_rename N IX_Cname , N IX_Course_Cname , N INDEX (2) 使用圖形工具重命名索引使用圖形工具重命名索引 具體步驟詳見教材具體步驟詳見教材36368.1 使用索引使用索引n 刪除索引刪除索引當(dāng)一個(gè)索引不再需要時(shí),可以將其從數(shù)據(jù)庫中刪除,以當(dāng)一個(gè)索引不再需要時(shí),可以將其從數(shù)據(jù)庫中刪除,以回收它當(dāng)前使用的磁盤空間。以便數(shù)據(jù)庫中的任何對(duì)象都可回收它當(dāng)前使用的磁盤空間。以便數(shù)據(jù)
33、庫中的任何對(duì)象都可以使用此回收的空間。以使用此回收的空間。必須先刪除必須先刪除PRIMARY KEY或或UNIQUE約束,才能刪除約束,才能刪除約束使用的索引約束使用的索引 。刪除視圖或表時(shí),將自動(dòng)刪除為永久性和臨時(shí)性視圖或刪除視圖或表時(shí),將自動(dòng)刪除為永久性和臨時(shí)性視圖或表創(chuàng)建的索引表創(chuàng)建的索引 。刪除聚集索引后,存儲(chǔ)在聚集索引葉級(jí)中的數(shù)據(jù)行將存刪除聚集索引后,存儲(chǔ)在聚集索引葉級(jí)中的數(shù)據(jù)行將存儲(chǔ)在未排序的表儲(chǔ)在未排序的表(堆堆)中中 。刪除索引視圖的聚集索引時(shí),將自動(dòng)刪除同一視圖的所刪除索引視圖的聚集索引時(shí),將自動(dòng)刪除同一視圖的所有非聚集索引和自動(dòng)創(chuàng)建的統(tǒng)計(jì)信息。手動(dòng)創(chuàng)建的統(tǒng)計(jì)信息有非聚集索引
34、和自動(dòng)創(chuàng)建的統(tǒng)計(jì)信息。手動(dòng)創(chuàng)建的統(tǒng)計(jì)信息不會(huì)刪除。不會(huì)刪除。37378.1 使用索引使用索引1. 使用使用Transact-SQL語句刪除索引語句刪除索引 可以使用可以使用DROP INDEX命令刪除索引,語句的語法格式命令刪除索引,語句的語法格式如下。如下。DROP INDEX index_name ON DROP INDEX語句不適用于通過定義語句不適用于通過定義PRIMARY KEY或或UNIQUE約束創(chuàng)建的索引。這些約束是分別使用約束創(chuàng)建的索引。這些約束是分別使用CREATE TABLE或或ALTER TABLE語句的語句的PRIMARY KEY或或UNIQUE選項(xiàng)創(chuàng)建的。選項(xiàng)創(chuàng)建的。
35、38388.1 使用索引使用索引例如:例如:刪除索引。下列示例刪除了刪除索引。下列示例刪除了student表中的表中的IX_age索引。索引。 USE teachingGODROP INDEX IX_age ON studentGO2. 使用圖形工具刪除索引使用圖形工具刪除索引 具體步驟詳見教材具體步驟詳見教材39398.2 使用視圖使用視圖視圖可以被看成是虛擬表或存儲(chǔ)查詢。除非是索引視圖,視圖可以被看成是虛擬表或存儲(chǔ)查詢。除非是索引視圖,否則視圖的數(shù)據(jù)不會(huì)作為非重復(fù)對(duì)象存儲(chǔ)在數(shù)據(jù)庫中。否則視圖的數(shù)據(jù)不會(huì)作為非重復(fù)對(duì)象存儲(chǔ)在數(shù)據(jù)庫中。SELECT語句的結(jié)果集構(gòu)成視圖所返回的虛擬表。用戶可以語句
36、的結(jié)果集構(gòu)成視圖所返回的虛擬表。用戶可以采用引用表時(shí)所使用的方法,在采用引用表時(shí)所使用的方法,在Transact-SQL語句中引用視語句中引用視圖名稱來使用此虛擬表。圖名稱來使用此虛擬表。40408.2 使用視圖使用視圖n 視圖的作用視圖的作用視圖是一個(gè)虛擬表,其內(nèi)容由查詢定義視圖是一個(gè)虛擬表,其內(nèi)容由查詢定義 。通過視圖進(jìn)行。通過視圖進(jìn)行查詢沒有任何限制,通過它們進(jìn)行數(shù)據(jù)修改時(shí)的限制也很少查詢沒有任何限制,通過它們進(jìn)行數(shù)據(jù)修改時(shí)的限制也很少 。(1) 視圖的類型視圖的類型 標(biāo)準(zhǔn)視圖標(biāo)準(zhǔn)視圖 標(biāo)準(zhǔn)視圖組合了一個(gè)或多個(gè)表中的數(shù)據(jù),可以獲得使用標(biāo)準(zhǔn)視圖組合了一個(gè)或多個(gè)表中的數(shù)據(jù),可以獲得使用視圖的
37、大多數(shù)好處視圖的大多數(shù)好處 索引視圖索引視圖 分區(qū)視圖分區(qū)視圖 分區(qū)視圖在一臺(tái)或多臺(tái)服務(wù)器間水平連接一組成員表中分區(qū)視圖在一臺(tái)或多臺(tái)服務(wù)器間水平連接一組成員表中的分區(qū)數(shù)據(jù)的分區(qū)數(shù)據(jù) 41418.2 使用視圖使用視圖(2) 視圖的使用視圖的使用視圖可用作安全機(jī)制,它可以允許用戶通過視圖訪問數(shù)視圖可用作安全機(jī)制,它可以允許用戶通過視圖訪問數(shù)據(jù),而不授予用戶直接訪問視圖基礎(chǔ)表的權(quán)限據(jù),而不授予用戶直接訪問視圖基礎(chǔ)表的權(quán)限 使用視圖有以下作用使用視圖有以下作用 : 著重于特定數(shù)據(jù)著重于特定數(shù)據(jù) 視圖使用戶能夠著重于所感興趣的特定數(shù)據(jù)和所負(fù)責(zé)的視圖使用戶能夠著重于所感興趣的特定數(shù)據(jù)和所負(fù)責(zé)的特定任務(wù)。不
38、必要的數(shù)據(jù)或敏感數(shù)據(jù)可以不出現(xiàn)在視圖中特定任務(wù)。不必要的數(shù)據(jù)或敏感數(shù)據(jù)可以不出現(xiàn)在視圖中 。 簡(jiǎn)化數(shù)據(jù)操作簡(jiǎn)化數(shù)據(jù)操作 可以將常用聯(lián)接、投影、可以將常用聯(lián)接、投影、UNION查詢和查詢和SELECT查詢定查詢定義為視圖,以便使用戶不必在每次對(duì)該數(shù)據(jù)執(zhí)行附加操作時(shí)義為視圖,以便使用戶不必在每次對(duì)該數(shù)據(jù)執(zhí)行附加操作時(shí)指定所有條件和條件限定。指定所有條件和條件限定。 42428.2 使用視圖使用視圖 提供向后兼容性提供向后兼容性視圖能夠在表的架構(gòu)更改時(shí)為表創(chuàng)建向后兼容接口視圖能夠在表的架構(gòu)更改時(shí)為表創(chuàng)建向后兼容接口 。 自定義數(shù)據(jù)自定義數(shù)據(jù) 視圖允許用戶以不同方式查看數(shù)據(jù),即使在他們同時(shí)使視圖允許用
39、戶以不同方式查看數(shù)據(jù),即使在他們同時(shí)使用相同的數(shù)據(jù)時(shí)也是如此。這在具有許多不同目的和技術(shù)水用相同的數(shù)據(jù)時(shí)也是如此。這在具有許多不同目的和技術(shù)水平的用戶共用同一數(shù)據(jù)庫時(shí)尤其有用。平的用戶共用同一數(shù)據(jù)庫時(shí)尤其有用。 例如,可創(chuàng)建一個(gè)視圖以僅檢索由客戶經(jīng)理處理的客戶例如,可創(chuàng)建一個(gè)視圖以僅檢索由客戶經(jīng)理處理的客戶數(shù)據(jù)。該視圖可以根據(jù)使用它的客戶經(jīng)理的登錄數(shù)據(jù)。該視圖可以根據(jù)使用它的客戶經(jīng)理的登錄ID決定檢索決定檢索哪些數(shù)據(jù)。哪些數(shù)據(jù)。43438.2 使用視圖使用視圖 導(dǎo)出和導(dǎo)入數(shù)據(jù)導(dǎo)出和導(dǎo)入數(shù)據(jù) 可使用視圖將數(shù)據(jù)導(dǎo)出到其他應(yīng)用程序??墒褂靡晥D將數(shù)據(jù)導(dǎo)出到其他應(yīng)用程序。例如,可將例如,可將teachi
40、ng數(shù)據(jù)庫中的數(shù)據(jù)庫中的student表、表、course表及表及s_c表導(dǎo)出至表導(dǎo)出至Microsoft Excel中進(jìn)行數(shù)據(jù)分析中進(jìn)行數(shù)據(jù)分析 。 跨服務(wù)器組合分區(qū)數(shù)據(jù)跨服務(wù)器組合分區(qū)數(shù)據(jù) Transact-SQL UNION集合運(yùn)算符可在視圖內(nèi)使用,將單集合運(yùn)算符可在視圖內(nèi)使用,將單獨(dú)表的兩個(gè)或多個(gè)查詢的結(jié)果組合到單一的結(jié)果集中。這在獨(dú)表的兩個(gè)或多個(gè)查詢的結(jié)果組合到單一的結(jié)果集中。這在用戶看來是一個(gè)單獨(dú)的表,稱為分區(qū)視圖用戶看來是一個(gè)單獨(dú)的表,稱為分區(qū)視圖 。例如,如果一個(gè)表包含天津的銷售數(shù)據(jù),另一個(gè)表包含例如,如果一個(gè)表包含天津的銷售數(shù)據(jù),另一個(gè)表包含北京的銷售數(shù)據(jù),則可以對(duì)這兩個(gè)表使
41、用北京的銷售數(shù)據(jù),則可以對(duì)這兩個(gè)表使用UNION創(chuàng)建一個(gè)創(chuàng)建一個(gè)視圖。該視圖代表這兩個(gè)地區(qū)的銷售數(shù)據(jù)。視圖。該視圖代表這兩個(gè)地區(qū)的銷售數(shù)據(jù)。44448.2 使用視圖使用視圖n 創(chuàng)建視圖創(chuàng)建視圖若要?jiǎng)?chuàng)建視圖,必須獲得數(shù)據(jù)庫所有者授予創(chuàng)建視圖的若要?jiǎng)?chuàng)建視圖,必須獲得數(shù)據(jù)庫所有者授予創(chuàng)建視圖的權(quán)限權(quán)限 。在創(chuàng)建視圖前需考慮如下規(guī)則在創(chuàng)建視圖前需考慮如下規(guī)則 : 只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建視圖只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建視圖 。 視圖名稱必須遵循標(biāo)識(shí)符的規(guī)則,且對(duì)每個(gè)架構(gòu)都必須視圖名稱必須遵循標(biāo)識(shí)符的規(guī)則,且對(duì)每個(gè)架構(gòu)都必須唯一唯一 ,該名稱不得與該架構(gòu)包含的任何表的名稱相同。,該名稱不得與該架構(gòu)包含的任何表的
42、名稱相同。 可以對(duì)其他視圖創(chuàng)建視圖可以對(duì)其他視圖創(chuàng)建視圖 。 不能將規(guī)則或不能將規(guī)則或DEFAULT定義與視圖相關(guān)聯(lián)定義與視圖相關(guān)聯(lián) 。 不能將不能將AFTER觸發(fā)器與視圖相關(guān)聯(lián),只有觸發(fā)器與視圖相關(guān)聯(lián),只有INSTEAD OF觸發(fā)器可以與之相關(guān)聯(lián)觸發(fā)器可以與之相關(guān)聯(lián) 。45458.2 使用視圖使用視圖定義視圖的查詢不能包含定義視圖的查詢不能包含COMPUTE子句、子句、COMPUTE BY子句或子句或INTO關(guān)鍵字關(guān)鍵字 。定義視圖的查詢不能包含定義視圖的查詢不能包含ORDER BY子句,除非在子句,除非在SELECT語句的語句的選擇列表中還有一個(gè)選擇列表中還有一個(gè)TOP子句。子句。 定義視
43、圖的查詢不能包含指定查詢提示的定義視圖的查詢不能包含指定查詢提示的OPTION子句子句 。不能創(chuàng)建臨時(shí)視圖,也不能對(duì)臨時(shí)表創(chuàng)建視圖不能創(chuàng)建臨時(shí)視圖,也不能對(duì)臨時(shí)表創(chuàng)建視圖 。下列情況下必須指定視圖中每列的名稱下列情況下必須指定視圖中每列的名稱 視圖中的任何列都是從算術(shù)表達(dá)式、內(nèi)置函數(shù)或常量派生而來視圖中的任何列都是從算術(shù)表達(dá)式、內(nèi)置函數(shù)或常量派生而來 ;視圖中有兩列或多列應(yīng)具有相同名稱視圖中有兩列或多列應(yīng)具有相同名稱 ;希望為視圖中的列指定一個(gè)與其源列不同的名稱希望為視圖中的列指定一個(gè)與其源列不同的名稱(也可以在視圖中重也可以在視圖中重命名列命名列) 。無論重命名與否,視圖列都會(huì)繼承其源列的數(shù)
44、據(jù)類型。無論重命名與否,視圖列都會(huì)繼承其源列的數(shù)據(jù)類型 。46468.2 使用視圖使用視圖1. 使用使用Transact-SQL命令創(chuàng)建視圖命令創(chuàng)建視圖 可以使用可以使用CREATE VIEW命令創(chuàng)建視圖,語句語法格式命令創(chuàng)建視圖,語句語法格式如下如下 :CREATE VIEW schema_name . view_name (column ,.n ) AS select_statement WITH CHECK OPTION ; 47478.2 使用視圖使用視圖 view_name:視圖的名稱:視圖的名稱 。 column ,.n :視圖中的列使用的名稱:視圖中的列使用的名稱 。 AS:指定
45、視圖要執(zhí)行的操作:指定視圖要執(zhí)行的操作 。 select_statement:定義視圖的:定義視圖的SELECT語句語句 。該語句可以使用多個(gè)表和其他視圖該語句可以使用多個(gè)表和其他視圖 。 WITH CHECK OPTION:強(qiáng)制針對(duì)視圖執(zhí)行的所有數(shù):強(qiáng)制針對(duì)視圖執(zhí)行的所有數(shù)據(jù)修改語句都必須符合在據(jù)修改語句都必須符合在select_statement中設(shè)置的條件中設(shè)置的條件 。通過視圖修改行時(shí),通過視圖修改行時(shí),WITH CHECK OPTION可確保提可確保提交修改后,仍可通過視圖看到數(shù)據(jù)。如果在交修改后,仍可通過視圖看到數(shù)據(jù)。如果在select_statement中的任何位置使用中的任何位
46、置使用TOP,則不能指定,則不能指定CHECK OPTION。48488.2 使用視圖使用視圖例如:使用例如:使用CREATE VIEW命令。以下示例使用簡(jiǎn)單命令。以下示例使用簡(jiǎn)單SELECT語句創(chuàng)建視圖語句創(chuàng)建視圖 ,此視圖的數(shù)據(jù)來自,此視圖的數(shù)據(jù)來自teaching數(shù)據(jù)庫數(shù)據(jù)庫的的student和和s_c表。這些數(shù)據(jù)提供有關(guān)學(xué)生的學(xué)號(hào)、姓名以表。這些數(shù)據(jù)提供有關(guān)學(xué)生的學(xué)號(hào)、姓名以及所選課程的課號(hào)和成績(jī)及所選課程的課號(hào)和成績(jī) 。USE teachingGOCREATE VIEW student_viewAS SELECT s.SNO, s.SNAME, sc.CNO, sc.GRADEFRO
47、M student s JOIN s_c sc on s.SNO=sc.SNOGO49498.2 使用視圖使用視圖2. 使用圖形工具創(chuàng)建視圖使用圖形工具創(chuàng)建視圖具體步驟詳見教材具體步驟詳見教材50508.2 使用視圖使用視圖n 修改視圖修改視圖視圖定義后,可以更改視圖的名稱或視圖的定義而無需視圖定義后,可以更改視圖的名稱或視圖的定義而無需刪除并重新創(chuàng)建視圖。刪除并重新創(chuàng)建視圖會(huì)造成與該視圖刪除并重新創(chuàng)建視圖。刪除并重新創(chuàng)建視圖會(huì)造成與該視圖關(guān)聯(lián)的權(quán)限丟失。關(guān)聯(lián)的權(quán)限丟失。1. 重命名視圖重命名視圖在重命名視圖時(shí),需考慮以下原則。在重命名視圖時(shí),需考慮以下原則。 要重命名的視圖必須位于當(dāng)前數(shù)據(jù)庫
48、中。要重命名的視圖必須位于當(dāng)前數(shù)據(jù)庫中。 新名稱必須遵守標(biāo)識(shí)符規(guī)則。新名稱必須遵守標(biāo)識(shí)符規(guī)則。 僅可以重命名具有更改權(quán)限的視圖。僅可以重命名具有更改權(quán)限的視圖。 數(shù)據(jù)庫所有者可以更改任何用戶視圖的名稱數(shù)據(jù)庫所有者可以更改任何用戶視圖的名稱 。51518.2 使用視圖使用視圖(1) 使用系統(tǒng)存儲(chǔ)過程重命名視圖使用系統(tǒng)存儲(chǔ)過程重命名視圖可以使用系統(tǒng)存儲(chǔ)過程可以使用系統(tǒng)存儲(chǔ)過程sp_rename來重命名視圖名稱,與來重命名視圖名稱,與重命名索引方法相同重命名索引方法相同 。(2)使用圖形工具重命名視圖使用圖形工具重命名視圖右擊要重命名的視圖,選擇右擊要重命名的視圖,選擇“重命名重命名”,然后輸入新視
49、,然后輸入新視圖名稱,回車即可圖名稱,回車即可 。注意:重命名視圖并不更改它在視圖定義文本中的名稱。注意:重命名視圖并不更改它在視圖定義文本中的名稱。要在定義中更改視圖名稱,應(yīng)直接修改視圖。要在定義中更改視圖名稱,應(yīng)直接修改視圖。52528.2 使用視圖使用視圖2. 修改視圖定義修改視圖定義修改先前創(chuàng)建的視圖,其中包括索引視圖修改先前創(chuàng)建的視圖,其中包括索引視圖 。(1) 使用使用Transact-SQL命令修改視圖命令修改視圖 可以使用可以使用ALTER VIEW命令修改視圖定義,該命令不影命令修改視圖定義,該命令不影響相關(guān)的存儲(chǔ)過程或觸發(fā)器,并且不會(huì)更改權(quán)限響相關(guān)的存儲(chǔ)過程或觸發(fā)器,并且不
50、會(huì)更改權(quán)限 。語法格式如下語法格式如下 :ALTER VIEW schema_name . view_name ( column ,.n ) AS select_statement WITH CHECK OPTION ; 53538.2 使用視圖使用視圖注意:如果原來的視圖定義是使用注意:如果原來的視圖定義是使用WITH CHECK OPTION創(chuàng)建的,創(chuàng)建的,則只有在則只有在ALTER VIEW中也包含這些選項(xiàng)時(shí),才會(huì)啟用這些選項(xiàng)中也包含這些選項(xiàng)時(shí),才會(huì)啟用這些選項(xiàng) 。例如:修改例如:修改teaching數(shù)據(jù)庫中的視圖數(shù)據(jù)庫中的視圖student_view,使其只包含女學(xué),使其只包含女學(xué)生的
51、選課信息。生的選課信息。 USE teachingGOALTER VIEW student_viewAS SELECT s.SNO, s.SNAME, sc.CNO, sc.GRADEFROM student s JOIN s_c sc on s.SNO=sc.SNOWHERE s.SEX=FGO(2) 使用圖形工具修改視圖使用圖形工具修改視圖具體步驟詳見教材具體步驟詳見教材54548.2 使用視圖使用視圖3. 通過視圖修改數(shù)據(jù)通過視圖修改數(shù)據(jù)可以通過視圖修改基礎(chǔ)表的數(shù)據(jù),修改方式與通過可以通過視圖修改基礎(chǔ)表的數(shù)據(jù),修改方式與通過UPDATE、INSERT和和DELETE命令修改表中數(shù)據(jù)的方式
52、一命令修改表中數(shù)據(jù)的方式一樣樣 。但是,以下限制應(yīng)用于更新視圖,但不應(yīng)用于更新表。但是,以下限制應(yīng)用于更新視圖,但不應(yīng)用于更新表 。 任何修改任何修改(包括包括UPDATE、INSERT和和DELETE語句語句)都只都只能引用一個(gè)基礎(chǔ)表的列能引用一個(gè)基礎(chǔ)表的列 。 視圖中被修改的列必須直接引用表列中的基礎(chǔ)數(shù)據(jù),不視圖中被修改的列必須直接引用表列中的基礎(chǔ)數(shù)據(jù),不能通過其他方式派生能通過其他方式派生 。 正在修改的列不受正在修改的列不受GROUP BY、HAVING或或DISTINCT子句的影響。子句的影響。55558.2 使用視圖使用視圖 如果在視圖定義中使用了如果在視圖定義中使用了WITH C
53、HECK OPTION子句,子句,則所有在視圖上執(zhí)行的數(shù)據(jù)修改語句都必須符合定義視圖的則所有在視圖上執(zhí)行的數(shù)據(jù)修改語句都必須符合定義視圖的SELECT語句中所設(shè)置的條件。如果使用了語句中所設(shè)置的條件。如果使用了WITH CHECK OPTION子句,修改行時(shí)需注意不讓它們?cè)谛薷耐瓿珊髲囊曌泳?,修改行時(shí)需注意不讓它們?cè)谛薷耐瓿珊髲囊晥D中消失圖中消失 。 INSERT語句必須為不允許空值并且沒有語句必須為不允許空值并且沒有DEFAULT定義定義的基礎(chǔ)表中的所有列指定值。的基礎(chǔ)表中的所有列指定值。 在基礎(chǔ)表的列中修改的數(shù)據(jù)必須符合對(duì)這些列的約束,在基礎(chǔ)表的列中修改的數(shù)據(jù)必須符合對(duì)這些列的約束,例如為
54、空性、約束及例如為空性、約束及DEFAULT定義等。定義等。 56568.2 使用視圖使用視圖(1) 通過視圖添加數(shù)據(jù)通過視圖添加數(shù)據(jù) 例如:通過視圖將數(shù)據(jù)加載到基礎(chǔ)表。以下示例在例如:通過視圖將數(shù)據(jù)加載到基礎(chǔ)表。以下示例在INSERT命令中指定一個(gè)視圖名,但執(zhí)行后系統(tǒng)將新行插入命令中指定一個(gè)視圖名,但執(zhí)行后系統(tǒng)將新行插入到該視圖的基礎(chǔ)表中。到該視圖的基礎(chǔ)表中。INSERT語句中語句中VALUES列表的順序列表的順序必須與視圖的列順序相匹配必須與視圖的列順序相匹配 。57578.2 使用視圖使用視圖USE teachingGOCREATE VIEW stu_male_view AS SELEC
55、T SNO, SNAME, AGEFROM studentWHERE SEX=MGOINSERT INTO stu_male_view VALUES (S6, HUANG, 21)GOSELECT * FROM studentGOSELECT * FROM stu_male_viewGO對(duì)視圖對(duì)視圖stu_male_view增加的數(shù)據(jù)反映到基礎(chǔ)表增加的數(shù)據(jù)反映到基礎(chǔ)表student中,即:中,即:INSERT INTO stu_male_view VALUES (S6, HUANG, 21)語句轉(zhuǎn)變?yōu)椋赫Z句轉(zhuǎn)變?yōu)椋篒NSERT INTO student VALUES (S6, HUANG, M, 21)58588.2 使用視圖使用視圖(2) 通過視圖更改數(shù)據(jù)通過視圖更改數(shù)據(jù)例如:通過視圖將數(shù)據(jù)修改到基礎(chǔ)表。以下示例在例如:通過視圖將數(shù)據(jù)修改到基礎(chǔ)表。以下示例在UPDATE語句中指定一個(gè)視圖名,但將修改的數(shù)據(jù)反映到該語句中指定一個(gè)視圖名,但將修改的數(shù)據(jù)反映到該視圖的基礎(chǔ)表中視圖的基礎(chǔ)表中 。USE teachingGOCREATE VIEW stu_male_viewAS SELECT SNO, SNAME, AGEFROM student59598.2 使用視圖使用視圖WHERE SEX=MGOUPDATE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CASMES 4-2020智能財(cái)務(wù)管理師職業(yè)能力框架
- T/CAOE 26-2021海洋生態(tài)本底調(diào)查與評(píng)價(jià)規(guī)范
- 西門子筆試題java面試題及答案
- 白柵欄考試題及答案
- sshm面試題及答案
- 護(hù)理競(jìng)賽考試題庫及答案
- 地球文明考試題及答案
- 公考面試題型套路及答案
- 人生重在反思班會(huì)課件
- 食管賁門黏膜撕裂綜合征的臨床護(hù)理
- 《人的不安全行為》課件
- 《行政強(qiáng)制法講解》課件
- 工業(yè)機(jī)器人專業(yè)發(fā)展規(guī)劃書
- 氣壓止血帶在四肢手術(shù)中應(yīng)用的專家共識(shí)(2021版)
- 叔丁基鋰的安全使用
- 血管活性藥物靜脈輸注護(hù)理團(tuán)體解讀
- 輔導(dǎo)員基礎(chǔ)知識(shí)試題及答案
- 危險(xiǎn)化學(xué)品經(jīng)營許可安全技術(shù)
- 【更新版】深信服資格認(rèn)證考試題庫大匯總(含答案)
- 《酒店管理概論》教學(xué)課件
- 大學(xué)英語課程題庫建設(shè)思路探究
評(píng)論
0/150
提交評(píng)論