數據庫原理及應用(第3版)課件:索引及視圖應用_第1頁
數據庫原理及應用(第3版)課件:索引及視圖應用_第2頁
數據庫原理及應用(第3版)課件:索引及視圖應用_第3頁
數據庫原理及應用(第3版)課件:索引及視圖應用_第4頁
數據庫原理及應用(第3版)課件:索引及視圖應用_第5頁
已閱讀5頁,還剩44頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

索引與視圖數據庫原理及應用基于SQLServer2022(第3版)目錄目錄

5.1索引基本概述

5.2常用的索引操作

5.3視圖基本概述

5.4視圖的基本操作

5.5實驗5索引及視圖操作

5.6本章小結

教學目標

教學目標●理解索引的相關概念、作用和應用●了解索引的基本結構以及主要原理●理解視圖的相關概念和重要的作用●掌握視圖定義、查詢和更新等操作重點重點重點友情提示同步實驗(上機)1.1.1數據庫系統的發展及趨勢

1.人工數據管理階段

5.1索引基本概述

在學生表中查詢學號為“BX22736”的學生,查詢語句為:Select*From學生Where學號='BX22736’查詢的最基本方式是逐一順序比較表中全部記錄,篩選where子句中滿足指定“學號”的記錄。這種查詢方式非常耗時、占用存儲空間且浪費操作。如果在學生表的“學號”屬性列上建立索引,則無需對整個表逐一比較,便可直接定位到查詢記錄,快速檢索出需要的信息。案例5-15.1索引基本概述5.1.1索引的相關概念和特點1.索引的相關概念索引(Index)是數據表中數據(記錄)序號的邏輯指針清單。在數據庫中,是表中數據和相應存儲位置的列表,是加快檢索表中指定數據的方法。2.索引的主要特點使用索引可以提高系統性能,主要特點包括5個方面:1)加快數據檢索速度。創建索引后,可直接按照索引中位置確定表中記錄。2)保證數據記錄的唯一性。唯一性索引可以保證表中數據記錄不重復。3)加快表與表之間的連接速度,有助于更好的實現數據的參照完整性。4)在使用分組和排序子句檢索數據時,可以顯著減少分組和排序時間。5)通過索引能夠在查詢過程中使用優化隱藏器,提高系統的性能。

使用索引可以提高檢索效率,同時出現相關問題:1)物理存儲空間中除了存放數據表之外,還需要一定的額外空間存放索引,如果要建立聚集索引,需要的空間將會增大。2)索引和維護索引需要耗費時間,這種時間隨著數據量的增加而增加。3)數據表進行插入、修改和刪除操作時,相應索引也需要動態維護更新,消耗系統資源。2.非聚簇索引:也稱非聚類索引、非簇集索引,數據行不按其主鍵順序排序和存儲的索引。數據與索引分開存儲,索引的邏輯順序與磁盤上行的物理存儲順序不同。默認情況下建立的索引是非聚集索引。一個表可創建多個,最好在唯一值較多的列上創建。1.聚簇索引:也稱為聚類索引、簇集索引或物理索引等,將數據行的鍵值在表內排序并存儲對應的記錄,使數據表物理順序(存儲順序)與索引順序一致。當以某列(字段)作為關鍵字建立聚集索引時,表中數據以該列作為排序依據。5.1索引基本概述5.1.2索引的常用種類

在數據庫中,主要按照索引記錄的結構和存放位置索引分類有三種:聚集索引、非聚集索引和其他類型索引。5.1索引基本概述5.1.2索引的常用種類聚集索引和非聚集索引主要區別,如表5-1所示。3.其他類型索引:

除了上述兩類索引之外,還有以下其他索引:(1)唯一索引。若需要索引鍵(值)各不相同,可以創建唯一索引。聚集索引和非聚集索引均可用于強制表內的唯一性,方法是在現有表上創建索引時指定UNIQUE關鍵字,或用UNIQUE約束確保表內唯一性。(2)視圖索引。提供視圖查詢效率,對可以視圖的索引物理化,即將結果集永久存儲在索引中,并可創建視圖索引。(3)包含新列索引。最大索引列的數量為16,索引列的字節總數的最高值為900。若多個列的字節總數超過時,則可用包含性列索引。(4)全文索引。可以對存儲在數據庫中的文本數據快速檢索。是一種特殊類型的基于標記的功能性索引,每個表只允許有一個。用于幫助在字符串中搜索賦值的詞,由SQLServer全文引擎服務創建和維護。(5)XML索引。XML是可擴展標記語言(eXtensibleMarkupLanguage)縮寫,相對非結構化的數據,利用標記標識數據,并可與模式關聯,給基于XML的數據提供類型或驗證信息,是與XML數據關聯的索引形式。5.1索引基本概述表5-2SQLServer2022索引類型及其簡單說明索引類型簡單說明聚簇索引創建索引時,索引鍵值的邏輯順序決定表中對應行的物理順序。聚簇索引的底層(或稱為葉)包含該表的實際數據行,因此要求數據庫具有額外的可用工作空間來容納數據的排序結果和原始表或現有聚簇索引數據的臨時副本。一個表或者視圖只允許同時有一個聚簇索引。非聚簇索引創建一個指定表的邏輯排序的索引。對于非聚簇索引,數據行的物理排序獨立于索引排序。一般來說,先創建聚簇索引,后創建非聚簇索引。唯一索引唯一索引保證在索引列中的全部數據是唯一的,不能包含重復數據。如果存在唯一索引,數據庫引擎會在每次插入操作添加數據時檢查重復值。可生成重復鍵值的插入操作將被回滾,同時數據庫引擎顯示錯誤消息。分區索引為了改善大型表的可管理性和性能,常會對其進行分區。分區表在邏輯上是一個表,而物理上是多個表,對應的可以為已分區表建立分區索引。但是有時亦可以在未分區的表中使用分區索引,為表創建一個使用分區方案的聚簇索引后,一個普通表就變成了分區表。篩選索引篩選索引是一種經過優化的非聚集索引,適用于從表中選擇少數行的查詢。篩選索引使用篩選謂詞對表中的部分數據進行索引。與全表索引相比,設計良好的篩選索引可以提高查詢性能、減少索引維護開銷、降低索引存儲開銷。全文索引全文索引主要包含三種分析器:分詞器、詞干分析器和同義詞分析器。生成全文索引就是把表中的文本數據進行分詞和提取詞干,并轉換同義詞,過濾掉分詞中的停用詞,最后把處理之后的數據存儲到全文索引中。全文索引中存儲分詞及其位置等信息,由SQLServer全文引擎生成和維護。使用全文索引可以大大提高從長字符串數據中搜索復雜的詞的性能。空間索引是一種擴展索引,允許對數據庫中的空間數據類型(如geometry或geography)列編制索引。XML可以對xml數據類型列創建XML索引。它們對列中XML實例的所有標記、值和路徑進行索引,從而提高查詢性能。計算列上的索引從一個或多個其它列的值或者某些確定的輸入值派生的列上建立的索引。帶有包含列的索引可以將非鍵列(稱為包含列)添加到非聚集索引的葉級別,從而通過涵蓋查詢來提高查詢性能。也就是說,查詢中引用的所有列都作為鍵列或非鍵列包含在索引中。這樣,查詢優化器可以通過索引掃描找到所需的全部信息,而無需訪問表或聚集索引數據。列存儲索引在常規索引中,表中每行的數據都會存儲在一起,每列數據在一個索引中是跨所有頁保留的。在列存儲索引中,將數據按列來存儲并壓縮,每列的數據存放在一起。這種將數據按列壓縮存儲的方式減少了查詢對磁盤IO開銷和CPU開銷,最終達到提升查詢效率,降低響應時間的目的。5.1索引基本概述*5.1.2索引的結構及原理

1.索引的層次結構索引的層次結構通常是一個單獨的、物理的數據庫結構。(1)B-樹及索引結點B-樹也稱為平衡樹,是一種多路徑搜索樹。索引按照B-樹結構組織數據,B-樹中的每頁稱為一個索引結點,頂端結點稱為根結點,底層結點稱為葉結點,底層結點稱為葉結點。根結點與葉結點之間的其他索引級別稱為中間級。B-樹用于在查找特定數據時,提供一致性并節省查找時間。先從根結點開始,每次索引都按照一半或一少半的樹枝進行。只有少量數據時,根結點可直指數據的實際位置。5.1索引基本概述*5.1.2索引的結構及原理(2)葉層結點及頁拆分葉層結點位于B-樹的最底層,是含有實際物理數據的參考點,如圖5-1所示。葉更像瀏覽樹的整體,在葉層得到數據的最終結果。根結點常指向很多數據,可指向中間結點(非-葉層結點),是根結點與數據物理存儲的結點之間的其他結點,可指向其他的非-葉層結點,或指向葉層結點。對數據索引時,由根結點開始,移到等于或小于所查找的最高值的結點,并查找下一層,然后重復該處理過程,逐層沿著樹結構向下查找直到葉層。5.1索引基本概述*5.1.2索引的結構及原理(2)葉層結點及頁拆分當數據被添加到數據表中的樹結構時,結點需要拆分。在SQL結點等同于頁——稱為頁拆分,如圖5-2所示。頁拆分時,數據自動來回移動以保證樹平衡。第一半數據保留在舊頁上,而其余數據則被移到新頁中,且可保持樹平衡。5.1索引基本概述

2.索引的基本原理SQL檢索有兩種方法:對表逐行查詢和索引。SQL執行特定檢索的方法取決于可用的索引、所需列、使用的連接和表的大小等。表的存儲組成分為兩部分:一是用于存放表的數據頁面,二是存放索引頁面。索引比數據頁面小很多,存放在索引頁面。當數據檢索時,系統先搜索索引頁面,找到所需數據的指針,再直接通過指針從數據頁面中讀取對應的數據。

如圖5-3所示為SQL的pubs示例數據庫,employee表的第一列有個索引。顯示索引存儲每個emp_id值并指向表中含有各值的數據行。表中執行索引,由指定emp_id值查找數據時,可識別emp_id列的索引,并由此索引查找所需數據位置,若無此索引,將從表第一行逐行搜索指定的emp_id值。5.1索引基本概述5.1.3創建索引的策略通常,可以考慮在以下屬性列上建立索引:1)在查詢條件中常用的列上建立索引,如商品名稱列,可加快查詢速度2)在連接條件中常出現的列上(外鍵)建立索引,可以加快連接速度3)在常用排序的列上建立索引,利用索引的排序,可加快檢索的速度4)在經常需要搜索連續范圍值的列上建立聚集索引,找到第一個匹配行后,滿足要求的后續行在物理上是連續且有序的,因此只要將數據值直接與查找的終止值進行比較即可連續提取后續行。建立索引并沒明顯提高查詢速度卻增加系統負載的列,不適合建立索引1)在查詢中很少用到的列上不應該建立索引。2)在只有很少數據值的列上不應建立索引。如學生表中查詢所有男生信息,結果集中的行占了所有行的很大比例,則在性別列上建立索引并不能明顯提高查詢速度。3)在修改性能遠遠大于檢索性能的列上不宜建立索引,由于增加索引時將降低增加、刪除和更新行的速度,即降低修改性能。5.1索引基本概述1)案例5-1中,在學號屬性列上建立索引后如何提高了查詢效率?2)在外鍵列上建立索引后怎樣加快學生表和選課表的連接速度?

討論思考5.1索引基本概述5.2常用的索引操作5.2.1索引的創建及使用1.索引的創建在T-SQL語言中,使用CreateIndex語句,創建索引的語法格式為:CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]INDEX<索引名>ON<表名>(<列名>[<次序>][,<列名>[<次序>]]…)其中命令語句中的主要參數說明如下:1)UNIQUE表明要為數據表或視圖創建(定義)唯一索引。注意:只有當數據本身具有唯一特征時,建立唯一索引才有意義。如果必須要實施唯一性確保數據的完整性,則應在列上建立唯一約束,而不要創建唯一索引。當在表上創建唯一約束時,系統將自動在該列建立唯一索引。2)CLUSTERED表示要創建聚集索引,若無顯示聲明,默認創建的是非聚集索引。3)<表名>表示正在準備創建索引(文件)使用的基本表的名稱。4)索引可以建立在一個/多個列上,各<列名>之間用逗號分隔開。建立在多個列上的索引稱為復合索引。5)<次序>指定索引值的排序方式,包括ASC(升序)和DESC(降序),默認為ASC。

在學生選課表按課程代碼升序和學號升序建立唯一索引。CREATEUNIQUEINDEXSC_IndexON選課(課程代碼,學號)案例5-2注意:復合索引中,系統按照索引列出現的先后順序對索引項排序。如案例5-2中,先按照課程代碼的值升序排列,課程代碼相同時則按照學號的升序排列。5.2常用的索引操作2.索引的查看與使用(1)索引的查看1)查看指定表的索引信息,可用下述語句執行存儲過程操作:EXECSP_HELPINDEX<表名>該語句執行結果可返回指定表上所有索引的名稱、類型和建立索引的列。5.2常用的索引操作

(1)索引的查看2)查看某個索引的具體統計信息:索引名稱、統計密度和統計直方圖信息等,可通過SSMS在對象資源管理器中展開指定表中的統計信息結點,右鍵點擊指定索引,從彈出的快捷菜單中選擇“屬性”,從彈出的“統計信息屬性”窗口中可查看該索引的統計信息,如圖5-4。5.2常用的索引操作

2.索引的查看與使用

(1)索引的查看3)查看指定表中某個索引的統計信息,可以執行下述語句:DBCCSHOW_STATISTICS(表名,索引名)此命令也可以用于查看指定表中某個索引的統計信息。(2)聚簇索引與非聚簇索引的比較聚集索引可以決定數據的物理存儲順序,而非聚集索引則和數據的物理順序無關。

在教師表中按照姓名建立非聚集索引,按照姓名降序排列CREATEINDEXTname_IndexON教師(姓名DESC)案例5-3圖5-5在非聚簇索引的表中插入數據如圖5-5,學生表中原有3條記錄,在學生表的學號屬性上建立非聚簇索引后,插入新記錄(BX22236,測試,男,軟件工程,Null,Null),新記錄在學生表中最后一行。當在學生表的學號屬性上建立的是聚簇索引時,表中原有元組以及插入的新記錄都自動按照學號的大小順序重新排序,其結果如圖5-6。圖5-6在聚簇索引的表中插入數據

在學生表的學號屬性上建立非聚集索引和聚集索引后,分別插入新的記錄(BX22236,測試,男,軟件工程,Null,Null),對比學生表中新記錄所在的位置,可更好地理解聚集索引。案例5-45.2常用的索引操作5.2.2索引的更新與刪除1.索引的更新由于數據庫中各種數據的不斷插入、修改、刪除和數據表的變化,數據庫系統運行一段時間后,索引對系統的優化性能將出現降低,需要對索引進行分析和更新(重建)。用命令語句確定更新索引,采用的語句格式為:USE<數據庫名>DECLARE@table_idint--定義局部變量table_idSET@table_id=object_id('Employee’)DBCCSHOWCONTIG(@table_id)5.2常用的索引操作2.索引的刪除在索引建立后,將由系統操作并維護。建立索引是為了快速查詢,但如果數據增刪改頻繁,系統將花費很多時間維護索引,從而降低了查詢效率。為此,可以刪除一些不必要的索引。SQLServer中提供了索引的刪除功能。刪除索引的命令語法格式為:

DROPINDEX<索引名>ON<表名或視圖名>

或者DROPINDEX<表名或視圖名>.<索引名>

注意:DROPINDEX語句不能刪除通過PRINARYKEY約束和UNIQUEKEY約束創建的索引。

5.2常用的索引操作

刪除教師表中教師的姓名列上的Tname_Index索引。DROPINDEXTname_IndexOn教師

刪除索引時,系統會同時從數據字典中刪除該索引的相關描述。案例5-51)在數據表的唯一索引列上能插入空值嗎?2)說明聚集索引與非聚集索引有哪些區別?

討論思考5.2常用的索引操作5.3視圖基本概述5.3.1視圖的概念及作用1.視圖的概念

視圖(View)是一個由表或其他視圖導出的虛擬表。是通過查詢(篩選)指定格式和數據的一種特殊表,如購物網頁中某個商品展示圖或界面。視圖只存放其定義及其關聯的基表信息而不存放具體實際數據。圖5-7表示了視圖和基本表的對應關系。視圖是數據庫基本表中的部分行和部分列數據的組合。表1

表1表25-7視圖與基本表對應關系示意圖5.3.1視圖的概念及作用表1

1.視圖的概念可以通過以下幾方面理解視圖的概念:1)視圖是查看數據庫中數據的一種機制。如具有某個研究生導師信息的界面2)數據庫中只存放視圖定義,不存放視圖包含的數據,視圖不占用物理空間。3)視圖中引用的表(可能多個)稱為視圖的基表,是篩選部分數據的來源。4)對視圖的操作轉換為對其基表的操作。操作的是視圖(格式)對應基表數據。5)基于視圖仍然可以創建視圖。實際是調用(借用)視圖基表數據。5.3視圖基本概述5.3.1視圖的概念及作用表1

2.視圖的作用實際應用中,合理地使用視圖機制可以帶來很多好處。1)便利用戶使用數據。視圖注重對用戶感興趣的某些指定數據及特定任務,可以省略無用或敏感數據,便于提高數據的操作效率。2)提供數據安全保護機制。通過視圖可以限定用戶的查詢權限,使部分用戶只能查看或修改特定的數據。3)多用戶多角度共享數據。當多位不同種類異地用戶,通過網絡多方式共享數據時,非常需要共享的靈活性,如網銀或網購。4)簡化數據操作。在對數據庫操作時,可以將經常使用的連接、投影、聯合查詢等定義為視圖,在每次執行相同查詢時,直接在視圖中查詢,極大簡化了對數據操作。5)數據具有邏輯獨立性。用戶利用應用系統的視圖(外模式)操作數據庫。當數據庫邏輯結構更新時,只需要修改視圖定義,便可保證用戶外模式不變,對應應用程序也無需修改。5.3視圖基本概述5.3.2視圖的種類表1

SQLServer提供了以下4種類型的視圖。1.標準視圖通過指定格式組合一個或多個基表中的數據,用戶可以獲得使用視圖的便利,充分體現了視圖機制的優點。2.索引視圖是指常用的從數據庫中定期進行構建并存儲的視圖。3.分區視圖在一臺或多臺服務器之間水平連接一組成員表中的分區數據。4.系統視圖存放SQLSERVER系統的部分信息。可用系統視圖返回SQLServer實例或在該實例中定義的對象有關的信息。5.3視圖基本概述1)采用視圖模式查看數據有什么好處?2)視圖的種類有哪些?各有什么特點?

討論思考5.3視圖基本概述5.4視圖的基本操作5.4.1視圖的策劃和創建

1.視圖構建的策劃構建(定義)數據庫視圖時主要從系統的時間效率、空間效率、易維護等方面出發。構建更符合局部用戶需要的視圖非常重要。構建視圖主要考慮3點:(1)可對不同級別的用戶定義不同的視圖,以權限管理保證系統的安全性。(2)使用更符合用戶習慣的別名。在設計數據庫總體結構時,同一關系(表)和屬性(列)具有唯一的名字,但在局部應用中,對同一關系或屬性,有各自更習慣的名字,可用視圖機制在設計用戶視圖時重新定義某些屬性名,使其與用戶習慣一致方便使用。(3)簡化用戶對系統的應用。若某些局部應用中經常使用某些很復雜的查詢,為了方便用戶,可以將其查詢建立為視圖,用戶每次只對此視圖查詢,可極大地簡化應用。注意:在創建(定義)視圖前還應該注意相關的操作細節。5.4視圖的基本操作5.4.1視圖的策劃和創建

2.視圖的建立使用命令語句定義視圖的語法格式為:CREATEVIEW<視圖名>[(<列名>[,<列名>]…)]AS<子查詢>[WITHCHECKOPTION]說明:“列名”可以全部省略或全部指定。如果全部省略,表明該視圖由子查詢中SELECT語句目標列中的各字段構成。對下列情況中,必須明確指定組成視圖的列名:子查詢SELECT語句中目標列不是單純的屬性名,而是聚集函數或表達式;子查詢進行多表連接操作時選出幾個同名的列作為視圖的屬性列;需要為視圖中某些列重新命名更適合的別名。

說明:本例中省略了視圖的列名,隱含該視圖的屬性列由子查詢中的屬性列組成。這種從單個基本表導出,并且只是去掉了基本表的某些行和某些列,但保留了主鍵,則稱這類視圖為行列子集視圖。WITHCHECKOPTION子句保證了對該視圖進行插入、修改和刪除操作時,RDBMS將自動加上職稱=“教授”的條件。5.4視圖的基本操作創建視圖“professor”,要求視圖中體現教師的工號、系部編號、姓名、性別、年齡和職稱。并保證進行修改和插入操作時仍保持視圖中只有教授。

CREATEVIEWprofessorASSELECT工號,系部編號,姓名,性別,年齡,職稱From教師WHERE職稱='教授'WITHCHECKOPTION

案例5-6

創建視圖“V_STU”,其中包含學生的學號、姓名、選修課名稱和選修課成績。CREATEVIEWV_STU(學號,姓名,課程名稱,成績)ASSELECT學生.學號,姓名,課程名稱,成績From學生,課程,選課WHERE學生.學號=選課.學號AND課程.課程編號=選課.課程編號說明:本例中視圖建立在多個表上。由于學生表中和選課表中有同名列“學號”,所以必須在視圖名后面顯式說明視圖的各屬性列名稱。

案例5-75.4視圖的基本操作

利用例5-6視圖,創建年齡小于46歲的教授的視圖professor_young”。CREATEVIEWprofessor_youngASSELECT工號,系部編號,教師姓名,性別,年齡,職稱FromprofessorWHERE年齡<46說明:本例表示可以在已有視圖上定義新視圖,此時作為數據源的視圖必須是已經建立好的視圖。

創建視圖“GRADE_AVG”,包括學生的學號及其選修課成績的平均成績。

CREATEVIEWGRADE_AVG(學號,平均成績)ASSELECT學號,avg(成績)From學生選課GroupBy學號

案例5-8

案例5-9說明:定義基本表時為了減少數據庫中的冗余數據,表中只存放基本數據,而能由基本數據經過計算派生出的數據一般不進行存儲。由于視圖中的數據并不進行實際存儲,所以定義視圖時可根據需要定義一些派生屬性列,也稱為虛擬列,此列通常包含表達式或聚集函數。5.4視圖的基本操作5.4.2視圖重命名、修改及刪除1.視圖重命名使用SQL命令重命名視圖的語法格式為:SP_RENAMEold_name,new_name其中,old_name為原視圖名稱,new_name為新的試圖名稱。說明:old_name為原視圖名稱,new_name為新的試圖名稱。使用SSMS重命名視圖時,在對象資源管理器中,展開包含要重命名的視圖的數據庫,展開“視圖”文件夾。右鍵單擊要重命名的視圖,選擇“重命名”,輸入視圖新名稱即可。注意:盡管SQLServer支持視圖的重命名,但是不建議這種操作。而是建議先刪除視圖,然后使用新名稱重新創建它。通過重新創建視圖,可以更新視圖中引用的對象的依賴關系信息。5.4視圖的基本操作5.4.2視圖重命名、修改及刪除2.視圖的修改修改視圖的SQL語句為ALTERVIEW,其具體語法格式為:ALTERVIEW<視圖名>AS<子查詢>5.4視圖的基本操作

將視圖“professor”修改為顯示年齡大于42的教授的信息。

ALTERVIEWprofessorASSELECT工號,系部編號,姓名,性別,年齡,職稱From教師WHERE職稱='教授'AND年齡>42

案例5-105.4.2視圖重命名、修改及刪除3.視圖的刪除刪除視圖實際是從數據字典中刪除視圖的定義和有關該視圖的其他信息,還將刪除視圖的所有權限,所以一定要慎重。刪除視圖的SQL命令為DROPVIEW,其具體語法格式為:DROPVIEW<視圖名>注意:刪除視圖后只是從數據字典中刪除該視圖的定義,由該視圖導出的其他視圖定義仍然在數據字典中,不過都已經失效。為避免用戶使用時出錯,此時需要用DROPVIEW語句將其逐一刪除。5.4視圖的基本操作*5.4.3查詢視圖及有關信息1.視圖查詢

用例5-6中創建的視圖“professor”,查詢男教授的相關信息。SELECT工號,系部編號,姓名,性別,年齡,職稱FromprofessorWHERE性別='男'本例中對視圖的查詢經過視圖消解,最終轉換的實際查詢為:SELECT工號,系部編號,姓名,性別,年齡,職稱From教師Where職稱='教授'AND性別='男'

案例5-115.4視圖的基本操作

利用例5-9中創建好的視圖“GRADE_AVG”,查詢選修課平均成績大于80的學生學號和平均成績。SELECT學號,平均成績FromGRADE_AVGWhere平均成績>80注意:若將本例的查詢與例5-10中定義視圖的子查詢直接結合,將形成下列查詢語句:SELECT學號,avg(成績)From選課

Whereavg(成績)>80GroupBy學號其中,這個轉換很明顯是錯誤的,因為Where子句中的條件表達式不能使用聚集函數,正確轉換后的查詢語句應該是:SELECT學號,avg(成績)From選課GroupBy學號Havingavg(成績)>80案例5-125.4視圖的基本操作2.獲取視圖相關信息(1)使用SSMS獲取視圖屬性(2)使用視圖設計器獲取視圖屬性(3)獲取創建視圖的SQL語句

向視圖“professor”中插入數據(C002,E2450,劉紅,女,48,教授)。

INSETRINTOprofessorValues('C002','E2450','劉紅','女',48,'教授')案例5-135.4視圖的基本操作*5.4.4更新視圖視圖的更新操作包括插入INSERT,刪除DELETE和修改UPDATE,視圖更新操作將轉換為對基表中數據的相應更新操作。用SQL語句更新視圖時,其語法格式同表的更新操作,只是用視圖名代替了表名。

修改視圖中“professor_young”中工號為E168的教師系部編號改為K4638。UPDATEprofessor_youngSET系部編號='K4638’WHERE工號='E168’該操作執行時將自動轉換為對基表的更新:UPDATE教師SET系部編號='K4638’WHERE工號='E168'AND職稱='教授'AND年齡<42注意:視圖更新的限制:由兩個以上基表導出的視圖不允許更新;若視圖的屬性列來自聚集函數,則此視圖不允許更新。需要特別注意的是,有些更新視圖操作不能直接轉化為對基表的更新操作。案例5-145.4視圖的基本操作5.4視圖基本操作例如,例5-10中創建的視圖“GRADE_AVG”中包含學號和平均成績兩個屬性列,其中平均成績是該學生多門選修課的平均分。如果要把視圖中學號為“BX22120”的學生平均成績修改為90,SQL語句應為:UPDATEGRADE_AVGSET平均成績=90WHERE學號=’BX22120’但是對該視圖的更新無法直接轉換為對基表“選課”的更新操作,因為系統沒有確定的可執行操作來修改多門課程成績,使得其平均分等于90,所以視圖“GRADE_AVG”無法更新。對視圖更新的規定一般包括以下幾點:1)對于數據表的行列子集視圖,可以進行更新操作。2)若視圖是由兩個以上的基表導出的,則視圖的修改不能同時影響兩個或者兩個以上的基表。也就是說,可以修改兩個或多個基表組成的視圖,但是一次修改只能影響一個基表。3)被修改的列必須直接引用表列中的基礎數據,即這些列不能是由聚集函數或者表達式計算得到的。4)被修改的列不受GROUPBY、HAVING或DISTINCT子句影響。5)對于不允許更新的視圖上定義的視圖也不允許更新。購書信息(數據)5.4視圖的基本操作1)舉例說明利用視圖機制如何實現數據的保護。如,對于教務管理系統,如何限制計算機系教務管理員只能查看本系學生的成績數據?2)如何利用視圖簡化“查詢至少選修了學生E168003選修的全部課程的學生號碼”?

討論思考5.4視圖的基本操作5.5.1實驗目的1)理解索引的相關概念、主要類型及其重要作用。2)掌握SQLSServer2022創建索引和刪除索引操作。3)熟悉視圖創建、刪除等常用的主要基本操作。4)熟悉使用視圖查詢數據和更新數據常用操作。5.5實驗5索引及視圖操作

5.5.2實驗內容及步驟分別使用SQLServer2022提供的SQLServerManagementStudio(SSMS)工具和SQL語句兩種方法實現索引和視圖操作。1.索引操作(1)創建索引(2)刪除索引

5.5實驗5索

溫馨提示

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

最新文檔

評論

0/150

提交評論