




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、2021-7-411 第第8章章 索引與視圖索引與視圖 2021-7-422 本章內(nèi)容本章內(nèi)容 n 8.1 使用索引使用索引 n 8.2 使用視圖使用視圖 2021-7-433 8.1 使用索引使用索引 索引是與表或視圖關(guān)聯(lián)的磁盤上結(jié)構(gòu),索引中的鍵存儲索引是與表或視圖關(guān)聯(lián)的磁盤上結(jié)構(gòu),索引中的鍵存儲 在一個結(jié)構(gòu)中,使在一個結(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)制表中的行具有唯一性,從而確保
2、表數(shù)據(jù)的數(shù)索引還可以強(qiáng)制表中的行具有唯一性,從而確保表數(shù)據(jù)的數(shù) 據(jù)完整性;使用索引可以快速找到表或索引視圖中的特定信據(jù)完整性;使用索引可以快速找到表或索引視圖中的特定信 息息 。 2021-7-444 8.1 使用索引使用索引 n 索引的分類索引的分類 表或視圖的索引可以包括以下幾類:表或視圖的索引可以包括以下幾類: (1) 惟一索引惟一索引 在表中建立惟一性索引時,組成該索引的字段或字段組在表中建立惟一性索引時,組成該索引的字段或字段組 合在表中具有惟一值,也就是說,對于表中的任何兩行記錄合在表中具有惟一值,也就是說,對于表中的任何兩行記錄 來說,索引鍵的值都是各不相同。來說,索引鍵的值都是
3、各不相同。 2021-7-455 8.1 使用索引使用索引 (2) 聚集索引聚集索引 聚集索引根據(jù)數(shù)據(jù)行的鍵值在表或視圖中排序和存儲這聚集索引根據(jù)數(shù)據(jù)行的鍵值在表或視圖中排序和存儲這 些數(shù)據(jù)行,即聚集索引決定了數(shù)據(jù)的物理順序。只有在表中些數(shù)據(jù)行,即聚集索引決定了數(shù)據(jù)的物理順序。只有在表中 建立了一個聚集索引后,數(shù)據(jù)才會按照索引鍵值指定的順序建立了一個聚集索引后,數(shù)據(jù)才會按照索引鍵值指定的順序 存儲到表中。由于一個表中的數(shù)據(jù)只能按照一種順序來存儲,存儲到表中。由于一個表中的數(shù)據(jù)只能按照一種順序來存儲, 所以在一個表中只能建立一個聚集索引。所以在一個表中只能建立一個聚集索引。 表具有聚集索引,則該
4、表稱為聚集表。否則,其數(shù)據(jù)行表具有聚集索引,則該表稱為聚集表。否則,其數(shù)據(jù)行 存儲在一個稱為堆的無序結(jié)構(gòu)中存儲在一個稱為堆的無序結(jié)構(gòu)中 。 2021-7-466 8.1 使用索引使用索引 (3) 非聚集索引非聚集索引 非聚集索引包含非聚集索引鍵值,并且每個鍵值項(xiàng)都有非聚集索引包含非聚集索引鍵值,并且每個鍵值項(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ù)頁是存儲在堆中還是聚集表器。行定位器的結(jié)構(gòu)取決于
5、數(shù)據(jù)頁是存儲在堆中還是聚集表 中。對于堆,行定位器是指向行的指針。對于聚集表,行定中。對于堆,行定位器是指向行的指針。對于聚集表,行定 位器是聚集索引鍵。位器是聚集索引鍵。 注意:注意: 聚集索引和非聚集索引都可以是唯一的,即任何兩行都聚集索引和非聚集索引都可以是唯一的,即任何兩行都 不能有相同的索引鍵值不能有相同的索引鍵值 ;索引也可以不是唯一的,即多行可;索引也可以不是唯一的,即多行可 以共享同一鍵值以共享同一鍵值 ;每當(dāng)修改了表數(shù)據(jù)后,都會自動維護(hù)表或;每當(dāng)修改了表數(shù)據(jù)后,都會自動維護(hù)表或 視圖的索引視圖的索引 。 2021-7-477 8.1 使用索引使用索引 (4) 包含性列索引包含
6、性列索引 一種非聚集索引,它擴(kuò)展后不僅包含鍵列,還包含非鍵一種非聚集索引,它擴(kuò)展后不僅包含鍵列,還包含非鍵 列列 。 (5) 索引視圖索引視圖 視圖的索引將具體化視圖的索引將具體化(執(zhí)行執(zhí)行)視圖,并將結(jié)果集永久存儲在視圖,并將結(jié)果集永久存儲在 唯一的聚集索引中,而且其存儲方法與帶聚集索引的表的存唯一的聚集索引中,而且其存儲方法與帶聚集索引的表的存 儲方法相同。創(chuàng)建聚集索引后,可以為視圖添加非聚集索引。儲方法相同。創(chuàng)建聚集索引后,可以為視圖添加非聚集索引。 2021-7-488 8.1 使用索引使用索引 (6) 全文索引全文索引 一種特殊類型的基于標(biāo)記的功能性索引,由一種特殊類型的基于標(biāo)記的功
7、能性索引,由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ù)類型列中數(shù)據(jù)類型列中XML二進(jìn)制大型對象的已拆分持久表二進(jìn)制大型對象的已拆分持久表 示形式示形式 。 注意:注意: 對表中的列定義了對表中的列定義了PRIMARY KEY約束和約束和UNIQUE約束約束 時,會自動創(chuàng)建索引。時,會自動創(chuàng)建索引。 2021-7-499 8.1 使用索引使用索引 n 索引設(shè)計(jì)準(zhǔn)則索引設(shè)計(jì)準(zhǔn)則 要設(shè)計(jì)出好的索引集,需要了解數(shù)據(jù)庫、查詢和數(shù)據(jù)
8、列要設(shè)計(jì)出好的索引集,需要了解數(shù)據(jù)庫、查詢和數(shù)據(jù)列 的特征的特征 。 (1) 數(shù)據(jù)庫準(zhǔn)則數(shù)據(jù)庫準(zhǔn)則 避免對經(jīng)常更新的表創(chuàng)建過多的索引,并且列要盡可能避免對經(jīng)常更新的表創(chuàng)建過多的索引,并且列要盡可能 少;使用多個索引可以提高更新少而數(shù)據(jù)量大的查詢的性能。少;使用多個索引可以提高更新少而數(shù)據(jù)量大的查詢的性能。 對小表進(jìn)行索引可能不會產(chǎn)生優(yōu)化效果對小表進(jìn)行索引可能不會產(chǎn)生優(yōu)化效果 。 當(dāng)視圖包含聚合、表聯(lián)接或聚合和聯(lián)接的組合時,視圖當(dāng)視圖包含聚合、表聯(lián)接或聚合和聯(lián)接的組合時,視圖 的索引可以顯著地提升性能的索引可以顯著地提升性能 。 2021-7-41010 8.1 使用索引使用索引 (2) 查詢準(zhǔn)
9、則查詢準(zhǔn)則 為經(jīng)常用于查詢中的謂詞和聯(lián)接條件的所有列創(chuàng)建非聚為經(jīng)常用于查詢中的謂詞和聯(lián)接條件的所有列創(chuàng)建非聚 集索引。集索引。 涵蓋索引可以提高查詢性能,因?yàn)榉喜樵円蟮娜亢w索引可以提高查詢性能,因?yàn)榉喜樵円蟮娜?數(shù)據(jù)都存在于索引本身中數(shù)據(jù)都存在于索引本身中 。 將插入或修改盡可能多的行的查詢寫入單個語句內(nèi),而將插入或修改盡可能多的行的查詢寫入單個語句內(nèi),而 不要使用多個查詢更新相同的行。不要使用多個查詢更新相同的行。 評估查詢類型以及如何在查詢中使用列評估查詢類型以及如何在查詢中使用列 。例如,在完全。例如,在完全 匹配查詢類型中使用的列就適合用于非聚集索引或聚集索引。匹配查詢類
10、型中使用的列就適合用于非聚集索引或聚集索引。 2021-7-41111 8.1 使用索引使用索引 (3) 列準(zhǔn)則列準(zhǔn)則 對于聚集索引,應(yīng)保持較短的索引鍵長度。另外,對唯對于聚集索引,應(yīng)保持較短的索引鍵長度。另外,對唯 一列或非空列創(chuàng)建聚集索引可以使聚集索引效率高一列或非空列創(chuàng)建聚集索引可以使聚集索引效率高 . 不能將不能將ntext、text、image、varchar(max)、 nvarchar(max)和和varbinary(max)數(shù)據(jù)類型的列指定為索引鍵數(shù)據(jù)類型的列指定為索引鍵 列列 ,不過,不過,varchar(max)、nvarchar(max)、varbinary(max) 和
11、和xml數(shù)據(jù)類型的列可以作為非鍵索引列參與非聚集索引。數(shù)據(jù)類型的列可以作為非鍵索引列參與非聚集索引。 xml數(shù)據(jù)類型的列只能在數(shù)據(jù)類型的列只能在XML索引中用作鍵列索引中用作鍵列 。 2021-7-41212 8.1 使用索引使用索引 如果索引包含多個列,則應(yīng)考慮列的順序如果索引包含多個列,則應(yīng)考慮列的順序 。 用于等于用于等于 (=)、大于、大于 ()、小于、小于 () 或或BETWEEN搜索條件搜索條件 的的WHERE子句或者參與聯(lián)接的列應(yīng)該放在最前面。其他列子句或者參與聯(lián)接的列應(yīng)該放在最前面。其他列 應(yīng)該基于其非重復(fù)級別進(jìn)行排序,就是說,從最不重復(fù)的列應(yīng)該基于其非重復(fù)級別進(jìn)行排序,就是說
12、,從最不重復(fù)的列 到最重復(fù)的列。到最重復(fù)的列。 考慮對計(jì)算列進(jìn)行索引考慮對計(jì)算列進(jìn)行索引 。 2021-7-41313 8.1 使用索引使用索引 (4) 索引特征索引特征 在確定某一索引適合某一查詢之后,可以選擇最適合具在確定某一索引適合某一查詢之后,可以選擇最適合具 體情況的索引類型。創(chuàng)建索引時需確定以下選項(xiàng)。體情況的索引類型。創(chuàng)建索引時需確定以下選項(xiàng)。 聚集還是非聚集聚集還是非聚集 唯一還是非唯一唯一還是非唯一 單列還是多列單列還是多列 索引中的列是升序排序還是降序排序索引中的列是升序排序還是降序排序 2021-7-41414 8.1 使用索引使用索引 n 創(chuàng)建索引創(chuàng)建索引 1. 創(chuàng)建索引
13、步驟如下:創(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對列定義對列定義 PRIMARY KEY或或UNIQUE約束。約束。 2021-7-41515 8.1 使用索引使用索引 默認(rèn)情況下,創(chuàng)建的唯一聚集索引可以強(qiáng)制默認(rèn)情況下,創(chuàng)建的唯一聚集索引可以強(qiáng)制PRIMARY
14、KEY約束,除非表中已存在聚集索引或指定了唯一的非聚集約束,除非表中已存在聚集索引或指定了唯一的非聚集 索引。默認(rèn)情況下,創(chuàng)建的唯一非聚集索引可以強(qiáng)制索引。默認(rèn)情況下,創(chuàng)建的唯一非聚集索引可以強(qiáng)制 UNIQUE約束,除非已明確指定唯一的聚集索引且表中不存約束,除非已明確指定唯一的聚集索引且表中不存 在聚集索引。在聚集索引。 使用使用CREATE INDEX語句或語句或SQL Server Management Studio對象資源管理器中的對象資源管理器中的“新建索引新建索引”對話框創(chuàng)建獨(dú)立于對話框創(chuàng)建獨(dú)立于 約束的索引約束的索引 。 必須指定索引的名稱、表以及應(yīng)用該索引的列。還可以必須指定索
15、引的名稱、表以及應(yīng)用該索引的列。還可以 指定索引選項(xiàng)和索引位置、文件組或分區(qū)方案。默認(rèn)情況下,指定索引選項(xiàng)和索引位置、文件組或分區(qū)方案。默認(rèn)情況下, 如果未指定聚集或唯一選項(xiàng),將創(chuàng)建非聚集的非唯一索引如果未指定聚集或唯一選項(xiàng),將創(chuàng)建非聚集的非唯一索引 2021-7-41616 8.1 使用索引使用索引 (3) 創(chuàng)建索引創(chuàng)建索引 一個重要因素需要考慮:是對空表還是對包含數(shù)據(jù)的表一個重要因素需要考慮:是對空表還是對包含數(shù)據(jù)的表 創(chuàng)建索引。對空表創(chuàng)建索引在創(chuàng)建索引時不會對性能產(chǎn)生任創(chuàng)建索引。對空表創(chuàng)建索引在創(chuàng)建索引時不會對性能產(chǎn)生任 何影響,而向表中添加數(shù)據(jù)時,會對性能產(chǎn)生影響。何影響,而向表中添加
16、數(shù)據(jù)時,會對性能產(chǎn)生影響。 創(chuàng)建索引后,索引將自動啟用并可以使用。可以通過禁創(chuàng)建索引后,索引將自動啟用并可以使用。可以通過禁 用索引來刪除對該索引的訪問。用索引來刪除對該索引的訪問。 2021-7-41717 8.1 使用索引使用索引 2. 創(chuàng)建聚集索引創(chuàng)建聚集索引 用途:聚集索引可以提高查詢性能,還可以按需重新生用途:聚集索引可以提高查詢性能,還可以按需重新生 成或重新組織來控制表碎片,所以除了個別表之外,每個表成或重新組織來控制表碎片,所以除了個別表之外,每個表 都應(yīng)該有聚集索引。也可以對視圖創(chuàng)建聚集索引都應(yīng)該有聚集索引。也可以對視圖創(chuàng)建聚集索引 。 聚集索引按下列方式實(shí)現(xiàn)聚集索引按下列方
17、式實(shí)現(xiàn) : PRIMARY KEY和和UNIQUE約束約束 在創(chuàng)建在創(chuàng)建PRIMARY KEY約束時,如果不存在該表的聚集約束時,如果不存在該表的聚集 索引且未指定唯一非聚集索引,則將自動對一列或多列創(chuàng)建索引且未指定唯一非聚集索引,則將自動對一列或多列創(chuàng)建 唯一聚集索引。主鍵列不允許空值。唯一聚集索引。主鍵列不允許空值。 在創(chuàng)建在創(chuàng)建UNIQUE約束時,默認(rèn)情況下將創(chuàng)建唯一非聚集約束時,默認(rèn)情況下將創(chuàng)建唯一非聚集 索引,以便強(qiáng)制索引,以便強(qiáng)制UNIQUE約束。如果不存在該表的聚集索引,約束。如果不存在該表的聚集索引, 則可以指定唯一聚集索引。則可以指定唯一聚集索引。 2021-7-41818
18、8.1 使用索引使用索引 將索引創(chuàng)建為約束的一部分后,會自動將索引命名為與將索引創(chuàng)建為約束的一部分后,會自動將索引命名為與 約束名稱相同的名稱。約束名稱相同的名稱。 獨(dú)立于約束的索引獨(dú)立于約束的索引 指定非聚集主鍵約束后,可以對非主鍵列的列創(chuàng)建聚集指定非聚集主鍵約束后,可以對非主鍵列的列創(chuàng)建聚集 索引索引 索引視圖索引視圖 若要創(chuàng)建索引視圖,需要對一個或多個視圖列定義唯一若要創(chuàng)建索引視圖,需要對一個或多個視圖列定義唯一 聚集索引。視圖將具體化,并且結(jié)果集存儲在該索引的頁級聚集索引。視圖將具體化,并且結(jié)果集存儲在該索引的頁級 別中,其存儲方式與表數(shù)據(jù)存儲在聚集索引中的方式相同別中,其存儲方式與表
19、數(shù)據(jù)存儲在聚集索引中的方式相同 。 2021-7-41919 8.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)建非聚集索引 。 索引視圖的非聚集索引:對視圖創(chuàng)建唯一的聚集索引后,索引視圖的非聚集索引:對視圖創(chuàng)建唯一的聚集索引后,
20、便可以創(chuàng)建非聚集索引便可以創(chuàng)建非聚集索引 。 2021-7-42020 8.1 使用索引使用索引 4. 創(chuàng)建唯一索引創(chuàng)建唯一索引 創(chuàng)建唯一索引可以確保任何生成重復(fù)鍵值的嘗試都會失創(chuàng)建唯一索引可以確保任何生成重復(fù)鍵值的嘗試都會失 敗。創(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ú)立于約束的索引:可以為一個表定義多個唯一非聚集獨(dú)立于約束的索引:可以為一個表定義多個唯一非聚集 索引索引 索引視圖索引視圖 如果在鍵列中
21、存在重復(fù)值,將無法創(chuàng)建唯一索引或約束如果在鍵列中存在重復(fù)值,將無法創(chuàng)建唯一索引或約束 2021-7-42121 8.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_name
22、 2021-7-42222 8.1 使用索引使用索引 UNIQUE:為表或視圖創(chuàng)建唯一索引。:為表或視圖創(chuàng)建唯一索引。 唯一索引不允許兩行具有相同的索引鍵值。視圖的聚集唯一索引不允許兩行具有相同的索引鍵值。視圖的聚集 索引必須唯一。索引必須唯一。 CLUSTERED:為表或視圖創(chuàng)建聚集索引:為表或視圖創(chuàng)建聚集索引 。 一個表或視圖只允許同時有一個聚集索引。為一個視圖一個表或視圖只允許同時有一個聚集索引。為一個視圖 創(chuàng)建唯一聚集索引會在物理上具體化該視圖。必須先為視圖創(chuàng)建唯一聚集索引會在物理上具體化該視圖。必須先為視圖 創(chuàng)建唯一聚集索引,然后才能為該視圖定義其他索引創(chuàng)建唯一聚集索引,然后才能為該
23、視圖定義其他索引 。 NONCLUSTERED:為表或視圖創(chuàng)建非聚集索引:為表或視圖創(chuàng)建非聚集索引 。對。對 于非聚集索引,數(shù)據(jù)行的物理排序獨(dú)立于索引排序于非聚集索引,數(shù)據(jù)行的物理排序獨(dú)立于索引排序 。每個表。每個表 都最多可包含都最多可包含249個非聚集索引個非聚集索引 。 默認(rèn)值為默認(rèn)值為NONCLUSTERED 2021-7-42323 8.1 使用索引使用索引 index_name:索引的名稱:索引的名稱 。 在表或視圖中必須唯一,但在數(shù)據(jù)庫中不必唯一。索引在表或視圖中必須唯一,但在數(shù)據(jù)庫中不必唯一。索引 名稱必須符合標(biāo)識符的規(guī)則名稱必須符合標(biāo)識符的規(guī)則 。 主主XML索引名不得以索引
24、名不得以#、#、 或或字符開頭。字符開頭。 column:索引所基于的一列或多列:索引所基于的一列或多列 。 指定兩個或多個列名,可為指定列的組合值創(chuàng)建組合索指定兩個或多個列名,可為指定列的組合值創(chuàng)建組合索 引。在引。在table_or_view_name后的括號中,按排序優(yōu)先級列出后的括號中,按排序優(yōu)先級列出 組合索引中要包括的列組合索引中要包括的列 。 一個組合索引鍵中最多可組合一個組合索引鍵中最多可組合16列。組合索引鍵中的所列。組合索引鍵中的所 有列必須在同一個表或視圖中有列必須在同一個表或視圖中 。 2021-7-42424 8.1 使用索引使用索引 ASC | DESC :確定特定
25、索引列的升序或降序排序方式。:確定特定索引列的升序或降序排序方式。 默認(rèn)值為默認(rèn)值為ASC 。 :要為其建立索引的完全限定對象或非完全限:要為其建立索引的完全限定對象或非完全限 定對象。其中選項(xiàng)含義同其他命令。定對象。其中選項(xiàng)含義同其他命令。 例如:創(chuàng)建簡單非聚集索引。以下示例為例如:創(chuàng)建簡單非聚集索引。以下示例為teaching數(shù)據(jù)庫數(shù)據(jù)庫 中中student表的表的AGE列創(chuàng)建非聚集索引。列創(chuàng)建非聚集索引。 USE teaching GO CREATE INDEX IX_age ON student (AGE) GO 執(zhí)行結(jié)果如圖執(zhí)行結(jié)果如圖8.1所示。所示。 2021-7-42525 8
26、.1 使用索引使用索引 6. 使用圖形工具創(chuàng)建索引使用圖形工具創(chuàng)建索引 具體步驟詳見教材具體步驟詳見教材 2021-7-42626 8.1 使用索引使用索引 n 修改索引修改索引 1. 禁止索引禁止索引 索引定義保留在元數(shù)據(jù)中,非聚集索引的索引統(tǒng)計(jì)信息索引定義保留在元數(shù)據(jù)中,非聚集索引的索引統(tǒng)計(jì)信息 仍保留。對視圖禁用非聚集索引或聚集索引會以物理方式刪仍保留。對視圖禁用非聚集索引或聚集索引會以物理方式刪 除索引數(shù)據(jù)。禁用表的聚集索引可以防止對數(shù)據(jù)的訪問,數(shù)除索引數(shù)據(jù)。禁用表的聚集索引可以防止對數(shù)據(jù)的訪問,數(shù) 據(jù)仍保留在表中,但在刪除或重新生成索引之前,無法對這據(jù)仍保留在表中,但在刪除或重新生成
27、索引之前,無法對這 些數(shù)據(jù)執(zhí)行些數(shù)據(jù)執(zhí)行DML操作。操作。 在以下情況中可能禁用一個或多個索引在以下情況中可能禁用一個或多個索引 : (1) SQL Server 2005 Database Engine在在SQL Server升級升級 期間自動禁用索引期間自動禁用索引 。 (2) 使用使用ALTER INDEX手動禁用索引手動禁用索引 。 2021-7-42727 8.1 使用索引使用索引 ALTER INDEX命令語句的語法格式如下:命令語句的語法格式如下: ALTER INDEX index_name | ALL ON DISABLE 各選項(xiàng)含義如下:各選項(xiàng)含義如下: ALL:指定與表或
28、視圖相關(guān)聯(lián)的所有索引,而不考慮索:指定與表或視圖相關(guān)聯(lián)的所有索引,而不考慮索 引類型。引類型。 DISABLE:將索引標(biāo)記為禁用,從而不能由:將索引標(biāo)記為禁用,從而不能由SQL Server 2005 Database Engine使用使用 。 已禁用索引的索引定義保留在沒有基礎(chǔ)索引數(shù)據(jù)的系統(tǒng)已禁用索引的索引定義保留在沒有基礎(chǔ)索引數(shù)據(jù)的系統(tǒng) 目錄中目錄中 。禁用聚集索引將阻止用戶訪問基礎(chǔ)表數(shù)據(jù)。禁用聚集索引將阻止用戶訪問基礎(chǔ)表數(shù)據(jù)。 2021-7-42828 8.1 使用索引使用索引 例如:禁用索引。下面的示例禁用了對例如:禁用索引。下面的示例禁用了對course表的表的 IX_Cname索引
29、。索引。 USE teaching GO ALTER INDEX IX_Cname ON course DISABLE GO 2021-7-42929 8.1 使用索引使用索引 (3) 使用圖形工具禁用索引使用圖形工具禁用索引 具體步驟詳見教材具體步驟詳見教材 2021-7-43030 8.1 使用索引使用索引 2. 啟用索引啟用索引 索引被禁用后一直保持禁用狀態(tài),直到它重新生成或刪索引被禁用后一直保持禁用狀態(tài),直到它重新生成或刪 除除 。 可以使用下列方法之一,重新生成禁用的索引來啟用它。可以使用下列方法之一,重新生成禁用的索引來啟用它。 (1) 帶帶REBUILD子句的子句的ALTER I
30、NDEX語句語句 ALTER INDEX命令語句的語法格式如下。命令語句的語法格式如下。 ALTER INDEX index_name | ALL ON REBUILD 2021-7-43131 8.1 使用索引使用索引 REBUILD:指定將使用相同的列、索引類型、唯一性屬:指定將使用相同的列、索引類型、唯一性屬 性和排序順序重新生成索引。性和排序順序重新生成索引。REBUILD啟用已禁用的索引。啟用已禁用的索引。 例如:重新生成索引。以下示例在例如:重新生成索引。以下示例在Course表中重新生成表中重新生成 索引索引IX_Cname。 USE teaching GO ALTER INDE
31、X IX_Cname ON course REBUILD GO 2021-7-43232 8.1 使用索引使用索引 (2) 使用圖形工具啟用索引使用圖形工具啟用索引 具體步驟詳見教材具體步驟詳見教材 2021-7-43333 8.1 使用索引使用索引 3. 重命名索引重命名索引 重命名索引將用提供的新名稱替換當(dāng)前的索引名稱重命名索引將用提供的新名稱替換當(dāng)前的索引名稱 。 (1) 使用使用sp_rename系統(tǒng)過程重命名索引系統(tǒng)過程重命名索引 sp_rename系統(tǒng)過程的語法格式如下。系統(tǒng)過程的語法格式如下。 sp_rename objname = object_name , newname =
32、 new_name , objtype = object_type 2021-7-43434 8.1 使用索引使用索引 objname = object_name:用戶對象或數(shù)據(jù)類型的:用戶對象或數(shù)據(jù)類型的 當(dāng)前限定或非限定名稱當(dāng)前限定或非限定名稱 。 如果要重命名的對象是表中的列,則如果要重命名的對象是表中的列,則object_name的格式的格式 必須是必須是table.column。如果要重命名的對象是索引,則。如果要重命名的對象是索引,則 object_name的格式必須是的格式必須是table.index。 newname = new_name:指定對象的新名稱:指定對象的新名稱 。
33、 new_name的數(shù)據(jù)類型為的數(shù)據(jù)類型為sysname,無默認(rèn)值,無默認(rèn)值 。 objtype = object_type:要重命名的對象的類型:要重命名的對象的類型 。 object_type的數(shù)據(jù)類型為的數(shù)據(jù)類型為 varchar(13),默認(rèn)值為,默認(rèn)值為NULL, 可取可取COLUMN、DATABASE、INDEX、OBJECT、 USERDATATYPE,具體見表,具體見表8.1。 2021-7-43535 8.1 使用索引使用索引 例如:重命名索引。以下示例將例如:重命名索引。以下示例將course表中的表中的IX_Cname 索引重命名為索引重命名為IX_Course_Cnam
34、e。 USE teaching GO EXEC sp_rename N IX_Cname , N IX_Course_Cname , N INDEX (2) 使用圖形工具重命名索引使用圖形工具重命名索引 具體步驟詳見教材具體步驟詳見教材 2021-7-43636 8.1 使用索引使用索引 n 刪除索引刪除索引 當(dāng)一個索引不再需要時,可以將其從數(shù)據(jù)庫中刪除,以當(dāng)一個索引不再需要時,可以將其從數(shù)據(jù)庫中刪除,以 回收它當(dāng)前使用的磁盤空間。以便數(shù)據(jù)庫中的任何對象都可回收它當(dāng)前使用的磁盤空間。以便數(shù)據(jù)庫中的任何對象都可 以使用此回收的空間。以使用此回收的空間。 必須先刪除必須先刪除PRIMARY KEY
35、或或UNIQUE約束,才能刪除約束,才能刪除 約束使用的索引約束使用的索引 。 刪除視圖或表時,將自動刪除為永久性和臨時性視圖或刪除視圖或表時,將自動刪除為永久性和臨時性視圖或 表創(chuàng)建的索引表創(chuàng)建的索引 。 刪除聚集索引后,存儲在聚集索引葉級中的數(shù)據(jù)行將存刪除聚集索引后,存儲在聚集索引葉級中的數(shù)據(jù)行將存 儲在未排序的表儲在未排序的表(堆堆)中中 。 刪除索引視圖的聚集索引時,將自動刪除同一視圖的所刪除索引視圖的聚集索引時,將自動刪除同一視圖的所 有非聚集索引和自動創(chuàng)建的統(tǒng)計(jì)信息。手動創(chuàng)建的統(tǒng)計(jì)信息有非聚集索引和自動創(chuàng)建的統(tǒng)計(jì)信息。手動創(chuàng)建的統(tǒng)計(jì)信息 不會刪除。不會刪除。 2021-7-4373
36、7 8.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)建的。 2021-7-43838 8.1 使用索引使用索引
37、例如:例如:刪除索引。下列示例刪除了刪除索引。下列示例刪除了student表中的表中的IX_age 索引。索引。 USE teaching GO DROP INDEX IX_age ON student GO 2. 使用圖形工具刪除索引使用圖形工具刪除索引 具體步驟詳見教材具體步驟詳見教材 2021-7-43939 8.2 使用視圖使用視圖 視圖可以被看成是虛擬表或存儲查詢。除非是索引視圖,視圖可以被看成是虛擬表或存儲查詢。除非是索引視圖, 否則視圖的數(shù)據(jù)不會作為非重復(fù)對象存儲在數(shù)據(jù)庫中。否則視圖的數(shù)據(jù)不會作為非重復(fù)對象存儲在數(shù)據(jù)庫中。 SELECT語句的結(jié)果集構(gòu)成視圖所返回的虛擬表。用戶可以
38、語句的結(jié)果集構(gòu)成視圖所返回的虛擬表。用戶可以 采用引用表時所使用的方法,在采用引用表時所使用的方法,在Transact-SQL語句中引用視語句中引用視 圖名稱來使用此虛擬表。圖名稱來使用此虛擬表。 2021-7-44040 8.2 使用視圖使用視圖 n 視圖的作用視圖的作用 視圖是一個虛擬表,其內(nèi)容由查詢定義視圖是一個虛擬表,其內(nèi)容由查詢定義 。通過視圖進(jìn)行。通過視圖進(jìn)行 查詢沒有任何限制,通過它們進(jìn)行數(shù)據(jù)修改時的限制也很少查詢沒有任何限制,通過它們進(jìn)行數(shù)據(jù)修改時的限制也很少 。 (1) 視圖的類型視圖的類型 標(biāo)準(zhǔn)視圖標(biāo)準(zhǔn)視圖 標(biāo)準(zhǔn)視圖組合了一個或多個表中的數(shù)據(jù),可以獲得使用標(biāo)準(zhǔn)視圖組合了一個
39、或多個表中的數(shù)據(jù),可以獲得使用 視圖的大多數(shù)好處視圖的大多數(shù)好處 索引視圖索引視圖 分區(qū)視圖分區(qū)視圖 分區(qū)視圖在一臺或多臺服務(wù)器間水平連接一組成員表中分區(qū)視圖在一臺或多臺服務(wù)器間水平連接一組成員表中 的分區(qū)數(shù)據(jù)的分區(qū)數(shù)據(jù) 2021-7-44141 8.2 使用視圖使用視圖 (2) 視圖的使用視圖的使用 視圖可用作安全機(jī)制,它可以允許用戶通過視圖訪問數(shù)視圖可用作安全機(jī)制,它可以允許用戶通過視圖訪問數(shù) 據(jù),而不授予用戶直接訪問視圖基礎(chǔ)表的權(quán)限據(jù),而不授予用戶直接訪問視圖基礎(chǔ)表的權(quán)限 使用視圖有以下作用使用視圖有以下作用 : 著重于特定數(shù)據(jù)著重于特定數(shù)據(jù) 視圖使用戶能夠著重于所感興趣的特定數(shù)據(jù)和所負(fù)
40、責(zé)的視圖使用戶能夠著重于所感興趣的特定數(shù)據(jù)和所負(fù)責(zé)的 特定任務(wù)。不必要的數(shù)據(jù)或敏感數(shù)據(jù)可以不出現(xiàn)在視圖中特定任務(wù)。不必要的數(shù)據(jù)或敏感數(shù)據(jù)可以不出現(xiàn)在視圖中 。 簡化數(shù)據(jù)操作簡化數(shù)據(jù)操作 可以將常用聯(lián)接、投影、可以將常用聯(lián)接、投影、UNION查詢和查詢和SELECT查詢定查詢定 義為視圖,以便使用戶不必在每次對該數(shù)據(jù)執(zhí)行附加操作時義為視圖,以便使用戶不必在每次對該數(shù)據(jù)執(zhí)行附加操作時 指定所有條件和條件限定。指定所有條件和條件限定。 2021-7-44242 8.2 使用視圖使用視圖 提供向后兼容性提供向后兼容性 視圖能夠在表的架構(gòu)更改時為表創(chuàng)建向后兼容接口視圖能夠在表的架構(gòu)更改時為表創(chuàng)建向后兼容
41、接口 。 自定義數(shù)據(jù)自定義數(shù)據(jù) 視圖允許用戶以不同方式查看數(shù)據(jù),即使在他們同時使視圖允許用戶以不同方式查看數(shù)據(jù),即使在他們同時使 用相同的數(shù)據(jù)時也是如此。這在具有許多不同目的和技術(shù)水用相同的數(shù)據(jù)時也是如此。這在具有許多不同目的和技術(shù)水 平的用戶共用同一數(shù)據(jù)庫時尤其有用。平的用戶共用同一數(shù)據(jù)庫時尤其有用。 例如,可創(chuàng)建一個視圖以僅檢索由客戶經(jīng)理處理的客戶例如,可創(chuàng)建一個視圖以僅檢索由客戶經(jīng)理處理的客戶 數(shù)據(jù)。該視圖可以根據(jù)使用它的客戶經(jīng)理的登錄數(shù)據(jù)。該視圖可以根據(jù)使用它的客戶經(jīng)理的登錄ID決定檢索決定檢索 哪些數(shù)據(jù)。哪些數(shù)據(jù)。 2021-7-44343 8.2 使用視圖使用視圖 導(dǎo)出和導(dǎo)入數(shù)據(jù)導(dǎo)
42、出和導(dǎo)入數(shù)據(jù) 可使用視圖將數(shù)據(jù)導(dǎo)出到其他應(yīng)用程序??墒褂靡晥D將數(shù)據(jù)導(dǎo)出到其他應(yīng)用程序。 例如,可將例如,可將teaching數(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ú)表的兩個或多個查詢的結(jié)果組合到單一的結(jié)果集中。這在獨(dú)表的兩個或多個查詢的結(jié)果組合到單一的結(jié)果集中。這在 用戶看來是一個單獨(dú)的表,稱為分區(qū)視圖用戶看來是一個單獨(dú)的表,稱為分區(qū)視圖 。 例
43、如,如果一個表包含天津的銷售數(shù)據(jù),另一個表包含例如,如果一個表包含天津的銷售數(shù)據(jù),另一個表包含 北京的銷售數(shù)據(jù),則可以對這兩個表使用北京的銷售數(shù)據(jù),則可以對這兩個表使用UNION創(chuàng)建一個創(chuàng)建一個 視圖。該視圖代表這兩個地區(qū)的銷售數(shù)據(jù)。視圖。該視圖代表這兩個地區(qū)的銷售數(shù)據(jù)。 2021-7-44444 8.2 使用視圖使用視圖 n 創(chuàng)建視圖創(chuàng)建視圖 若要創(chuàng)建視圖,必須獲得數(shù)據(jù)庫所有者授予創(chuà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)識符的
44、規(guī)則,且對每個架構(gòu)都必須視圖名稱必須遵循標(biāo)識符的規(guī)則,且對每個架構(gòu)都必須 唯一唯一 ,該名稱不得與該架構(gòu)包含的任何表的名稱相同。,該名稱不得與該架構(gòu)包含的任何表的名稱相同。 可以對其他視圖創(chuàng)建視圖可以對其他視圖創(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) 。 2021-7-44545 8.2 使用視圖使用視圖 定義視圖的查詢不能包含定義視圖的查詢不能包含COMPUTE子句、子句、COMPUTE BY子句或子句或 INT
45、O關(guān)鍵字關(guān)鍵字 。 定義視圖的查詢不能包含定義視圖的查詢不能包含ORDER BY子句,除非在子句,除非在SELECT語句的語句的 選擇列表中還有一個選擇列表中還有一個TOP子句。子句。 定義視圖的查詢不能包含指定查詢提示的定義視圖的查詢不能包含指定查詢提示的OPTION子句子句 。 不能創(chuàng)建臨時視圖,也不能對臨時表創(chuàng)建視圖不能創(chuàng)建臨時視圖,也不能對臨時表創(chuàng)建視圖 。 下列情況下必須指定視圖中每列的名稱下列情況下必須指定視圖中每列的名稱 視圖中的任何列都是從算術(shù)表達(dá)式、內(nèi)置函數(shù)或常量派生而來視圖中的任何列都是從算術(shù)表達(dá)式、內(nèi)置函數(shù)或常量派生而來 ; 視圖中有兩列或多列應(yīng)具有相同名稱視圖中有兩列或
46、多列應(yīng)具有相同名稱 ; 希望為視圖中的列指定一個與其源列不同的名稱希望為視圖中的列指定一個與其源列不同的名稱(也可以在視圖中重也可以在視圖中重 命名列命名列) 。無論重命名與否,視圖列都會繼承其源列的數(shù)據(jù)類型。無論重命名與否,視圖列都會繼承其源列的數(shù)據(jù)類型 。 2021-7-44646 8.2 使用視圖使用視圖 1. 使用使用Transact-SQL命令創(chuàng)建視圖命令創(chuàng)建視圖 可以使用可以使用CREATE VIEW命令創(chuàng)建視圖,語句語法格式命令創(chuàng)建視圖,語句語法格式 如下如下 : CREATE VIEW schema_name . view_name (column ,.n ) AS selec
47、t_statement WITH CHECK OPTION ; 2021-7-44747 8.2 使用視圖使用視圖 view_name:視圖的名稱:視圖的名稱 。 column ,.n :視圖中的列使用的名稱:視圖中的列使用的名稱 。 AS:指定視圖要執(zhí)行的操作:指定視圖要執(zhí)行的操作 。 select_statement:定義視圖的:定義視圖的SELECT語句語句 。 該語句可以使用多個表和其他視圖該語句可以使用多個表和其他視圖 。 WITH CHECK OPTION:強(qiáng)制針對視圖執(zhí)行的所有數(shù):強(qiáng)制針對視圖執(zhí)行的所有數(shù) 據(jù)修改語句都必須符合在據(jù)修改語句都必須符合在select_statemen
48、t中設(shè)置的條件中設(shè)置的條件 。 通過視圖修改行時,通過視圖修改行時,WITH CHECK OPTION可確保提可確保提 交修改后,仍可通過視圖看到數(shù)據(jù)。如果在交修改后,仍可通過視圖看到數(shù)據(jù)。如果在select_statement 中的任何位置使用中的任何位置使用TOP,則不能指定,則不能指定CHECK OPTION。 2021-7-44848 8.2 使用視圖使用視圖 例如:使用例如:使用CREATE VIEW命令。以下示例使用簡單命令。以下示例使用簡單 SELECT語句創(chuàng)建視圖語句創(chuàng)建視圖 ,此視圖的數(shù)據(jù)來自,此視圖的數(shù)據(jù)來自teaching數(shù)據(jù)庫數(shù)據(jù)庫 的的student和和s_c表。這些
49、數(shù)據(jù)提供有關(guān)學(xué)生的學(xué)號、姓名以表。這些數(shù)據(jù)提供有關(guān)學(xué)生的學(xué)號、姓名以 及所選課程的課號和成績及所選課程的課號和成績 。 USE teaching GO CREATE VIEW student_view AS SELECT s.SNO, s.SNAME, sc.CNO, sc.GRADE FROM student s JOIN s_c sc on s.SNO=sc.SNO GO 2021-7-44949 8.2 使用視圖使用視圖 2. 使用圖形工具創(chuàng)建視圖使用圖形工具創(chuàng)建視圖 具體步驟詳見教材具體步驟詳見教材 2021-7-45050 8.2 使用視圖使用視圖 n 修改視圖修改視圖 視圖定義后,
50、可以更改視圖的名稱或視圖的定義而無需視圖定義后,可以更改視圖的名稱或視圖的定義而無需 刪除并重新創(chuàng)建視圖。刪除并重新創(chuàng)建視圖會造成與該視圖刪除并重新創(chuàng)建視圖。刪除并重新創(chuàng)建視圖會造成與該視圖 關(guān)聯(lián)的權(quán)限丟失。關(guān)聯(lián)的權(quán)限丟失。 1. 重命名視圖重命名視圖 在重命名視圖時,需考慮以下原則。在重命名視圖時,需考慮以下原則。 要重命名的視圖必須位于當(dāng)前數(shù)據(jù)庫中。要重命名的視圖必須位于當(dāng)前數(shù)據(jù)庫中。 新名稱必須遵守標(biāo)識符規(guī)則。新名稱必須遵守標(biāo)識符規(guī)則。 僅可以重命名具有更改權(quán)限的視圖。僅可以重命名具有更改權(quán)限的視圖。 數(shù)據(jù)庫所有者可以更改任何用戶視圖的名稱數(shù)據(jù)庫所有者可以更改任何用戶視圖的名稱 。 20
51、21-7-45151 8.2 使用視圖使用視圖 (1) 使用系統(tǒng)存儲過程重命名視圖使用系統(tǒng)存儲過程重命名視圖 可以使用系統(tǒng)存儲過程可以使用系統(tǒng)存儲過程sp_rename來重命名視圖名稱,與來重命名視圖名稱,與 重命名索引方法相同重命名索引方法相同 。 (2)使用圖形工具重命名視圖使用圖形工具重命名視圖 右擊要重命名的視圖,選擇右擊要重命名的視圖,選擇“重命名重命名”,然后輸入新視,然后輸入新視 圖名稱,回車即可圖名稱,回車即可 。 注意:重命名視圖并不更改它在視圖定義文本中的名稱。注意:重命名視圖并不更改它在視圖定義文本中的名稱。 要在定義中更改視圖名稱,應(yīng)直接修改視圖。要在定義中更改視圖名稱
52、,應(yīng)直接修改視圖。 2021-7-45252 8.2 使用視圖使用視圖 2. 修改視圖定義修改視圖定義 修改先前創(chuàng)建的視圖,其中包括索引視圖修改先前創(chuàng)建的視圖,其中包括索引視圖 。 (1) 使用使用Transact-SQL命令修改視圖命令修改視圖 可以使用可以使用ALTER VIEW命令修改視圖定義,該命令不影命令修改視圖定義,該命令不影 響相關(guān)的存儲過程或觸發(fā)器,并且不會更改權(quán)限響相關(guān)的存儲過程或觸發(fā)器,并且不會更改權(quán)限 。 語法格式如下語法格式如下 : ALTER VIEW schema_name . view_name ( column ,.n ) AS select_statement
53、 WITH CHECK OPTION ; 2021-7-45353 8.2 使用視圖使用視圖 注意:如果原來的視圖定義是使用注意:如果原來的視圖定義是使用WITH CHECK OPTION創(chuàng)建的,創(chuàng)建的, 則只有在則只有在ALTER VIEW中也包含這些選項(xiàng)時,才會啟用這些選項(xiàng)中也包含這些選項(xiàng)時,才會啟用這些選項(xiàng) 。 例如:修改例如:修改teaching數(shù)據(jù)庫中的視圖數(shù)據(jù)庫中的視圖student_view,使其只包含女學(xué),使其只包含女學(xué) 生的選課信息。生的選課信息。 USE teaching GO ALTER VIEW student_view AS SELECT s.SNO, s.SNAME
54、, sc.CNO, sc.GRADE FROM student s JOIN s_c sc on s.SNO=sc.SNO WHERE s.SEX=F GO (2) 使用圖形工具修改視圖使用圖形工具修改視圖 具體步驟詳見教材具體步驟詳見教材 2021-7-45454 8.2 使用視圖使用視圖 3. 通過視圖修改數(shù)據(jù)通過視圖修改數(shù)據(jù) 可以通過視圖修改基礎(chǔ)表的數(shù)據(jù),修改方式與通過可以通過視圖修改基礎(chǔ)表的數(shù)據(jù),修改方式與通過 UPDATE、INSERT和和DELETE命令修改表中數(shù)據(jù)的方式一命令修改表中數(shù)據(jù)的方式一 樣樣 。但是,以下限制應(yīng)用于更新視圖,但不應(yīng)用于更新表。但是,以下限制應(yīng)用于更新視圖
55、,但不應(yīng)用于更新表 。 任何修改任何修改(包括包括UPDATE、INSERT和和DELETE語句語句)都只都只 能引用一個基礎(chǔ)表的列能引用一個基礎(chǔ)表的列 。 視圖中被修改的列必須直接引用表列中的基礎(chǔ)數(shù)據(jù),不視圖中被修改的列必須直接引用表列中的基礎(chǔ)數(shù)據(jù),不 能通過其他方式派生能通過其他方式派生 。 正在修改的列不受正在修改的列不受GROUP BY、HAVING或或DISTINCT 子句的影響。子句的影響。 2021-7-45555 8.2 使用視圖使用視圖 如果在視圖定義中使用了如果在視圖定義中使用了WITH CHECK OPTION子句,子句, 則所有在視圖上執(zhí)行的數(shù)據(jù)修改語句都必須符合定義視
56、圖的則所有在視圖上執(zhí)行的數(shù)據(jù)修改語句都必須符合定義視圖的 SELECT語句中所設(shè)置的條件。如果使用了語句中所設(shè)置的條件。如果使用了WITH CHECK OPTION子句,修改行時需注意不讓它們在修改完成后從視子句,修改行時需注意不讓它們在修改完成后從視 圖中消失圖中消失 。 INSERT語句必須為不允許空值并且沒有語句必須為不允許空值并且沒有DEFAULT定義定義 的基礎(chǔ)表中的所有列指定值。的基礎(chǔ)表中的所有列指定值。 在基礎(chǔ)表的列中修改的數(shù)據(jù)必須符合對這些列的約束,在基礎(chǔ)表的列中修改的數(shù)據(jù)必須符合對這些列的約束, 例如為空性、約束及例如為空性、約束及DEFAULT定義等。定義等。 2021-7
57、-45656 8.2 使用視圖使用視圖 (1) 通過視圖添加數(shù)據(jù)通過視圖添加數(shù)據(jù) 例如:通過視圖將數(shù)據(jù)加載到基礎(chǔ)表。以下示例在例如:通過視圖將數(shù)據(jù)加載到基礎(chǔ)表。以下示例在 INSERT命令中指定一個視圖名,但執(zhí)行后系統(tǒng)將新行插入命令中指定一個視圖名,但執(zhí)行后系統(tǒng)將新行插入 到該視圖的基礎(chǔ)表中。到該視圖的基礎(chǔ)表中。INSERT語句中語句中VALUES列表的順序列表的順序 必須與視圖的列順序相匹配必須與視圖的列順序相匹配 。 2021-7-45757 8.2 使用視圖使用視圖 USE teaching GO CREATE VIEW stu_male_view AS SELECT SNO, SNAM
58、E, AGE FROM student WHERE SEX=M GO INSERT INTO stu_male_view VALUES (S6, HUANG, 21) GO SELECT * FROM student GO SELECT * FROM stu_male_view GO 對視圖對視圖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)椋?INSERT INTO student VALUES (S6, HUANG, M, 21) 2021-7-45858 8.2 使用視圖使用視圖 (2) 通過視圖更改數(shù)據(jù)通過視圖更改數(shù)據(jù) 例如:通過視圖將數(shù)據(jù)修改到基礎(chǔ)表。以下示例在例如:通過視圖將數(shù)據(jù)修改到基礎(chǔ)表。以下示例在 UPDATE語句中指定一個視圖名,但將修改的數(shù)據(jù)反映到該語句中指定一個視圖名,但將修改的數(shù)據(jù)反映到該 視圖的基礎(chǔ)表中視圖的基礎(chǔ)表中 。 USE teaching GO CREATE VIEW stu_male_view AS SELECT SNO, SNAME, AGE FROM student 2021-7-45959 8.2 使用視圖使用視圖 WHERE SEX=M GO UPDATE stu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 助動車維修技術(shù)交流考核試卷
- 機(jī)器視覺與圖像處理技術(shù)考核試卷
- 智能儀器儀表項(xiàng)目規(guī)劃考核試卷
- 醫(yī)用針灸貼的種類和使用建議考核試卷
- 供應(yīng)鏈數(shù)字化轉(zhuǎn)型案例與啟示考核試卷
- 木紋設(shè)計(jì)與加工考核試卷
- 苗圃白蟻防治合同范本
- 留置權(quán)合同范本
- 業(yè)擴(kuò)報裝培訓(xùn)課件
- 8.3 摩擦力(共28張) 2024-2025學(xué)年人教版物理八年級下冊
- 人教版(2024新版)七年級上冊英語各單元重點(diǎn)語法知識點(diǎn)講義
- 生豬屠宰獸醫(yī)衛(wèi)生人員考試題庫答案(414道)
- 《完善中國特色社會主義法治體系》課件
- 2025版 高考試題分析-數(shù)學(xué)-部分4
- 湘教版三年級美術(shù)下冊教案全冊
- 重癥監(jiān)護(hù)-ICU的設(shè)置、管理與常用監(jiān)測技術(shù)
- 2024版高一上冊語文模擬試卷
- 法律顧問服務(wù)投標(biāo)方案(完整技術(shù)標(biāo))
- 知道網(wǎng)課智慧樹《哲學(xué)導(dǎo)論(湖南師范大學(xué))》章節(jié)測試答案
- 防止員工集體離職合同
- 加油站合作協(xié)議書
評論
0/150
提交評論