




已閱讀5頁,還剩102頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第4章 關(guān)系數(shù)據(jù)庫標準語言SQL,4.1 SQL概述及特點 4.2 SQL的數(shù)據(jù)定義功能 4.3 SQL的數(shù)據(jù)查詢功能 4.4 SQL的數(shù)據(jù)更新功能 4.5 嵌入式SQL 4.6 SQL的數(shù)據(jù)控制功能 習(xí)題4,4.1 SQL概述及特點,SQL是一種介于關(guān)系代數(shù)與關(guān)系演算之間的結(jié)構(gòu)化查詢語言,其功能并不僅僅是查詢。SQL語言是一個通用的、功能極強的關(guān)系數(shù)據(jù)庫語言。,1. SQL的主要功能 SQL的功能可以分為三類: (1) 數(shù)據(jù)定義功能。 (2) 數(shù)據(jù)操縱功能。 (3) 數(shù)據(jù)控制功能。,2. SQL的特點 SQL語言集數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制功能于一體,它除了具有一般關(guān)系數(shù)據(jù)庫語言的特點外,還具有以下三個特點: (1) SQL具有自主式和嵌入式兩種形式。 (2) SQL具有語言簡潔、易學(xué)易用的特點。 (3) SQL支持三級數(shù)據(jù)模式結(jié)構(gòu)。,表4-1 SQL的命令動詞,圖4-1 SQL對關(guān)系數(shù)據(jù)庫模式的支持,4.2 SQL的數(shù)據(jù)定義功能,SQL的數(shù)據(jù)定義包括定義基本表、索引、視圖和數(shù)據(jù)庫,其基本語句如表4-2所示。,表4-2 SQL的數(shù)據(jù)定義語句,1. 語句格式的約定符號 在語句格式中: 尖括號“”實際語義。 中括號“ ”中的內(nèi)容任選項。 大括號“”或用分隔符“|”中的內(nèi)容必選項,即必選其中之一項。 ,n表示前面的項可重復(fù)多次。,2. 一般語法規(guī)定 SQL中的數(shù)據(jù)項(包括列項、表和視圖)分隔符為“,”,其字符串常數(shù)的定界符用單引號“ ”表示。 3. SQL的特殊語法規(guī)定 SQL的關(guān)鍵詞一般使用大寫字母表示。SQL語句的結(jié)束符為“;”。SQL一般應(yīng)采用格式化書寫方式。,4.2.1 基本表的定義和維護功能 SQL的基本表定義和維護功能使用基本表的定義、修改和刪除三種語句實現(xiàn)。 1. 定義基本表 SQL語言使用CREATE TABLE語句定義基本表,定義基本表語句的一般格式為,CREATE TABLE 庫名表名( 列名數(shù)據(jù)類型列級完整性約束條件 ,列名數(shù)據(jù)類型列級完整性約束條件,n ,表級完整性約束條件,n );,(1) SQL支持的數(shù)據(jù)類型。 不同的數(shù)據(jù)庫系統(tǒng)支持的數(shù)據(jù)類型不完全相同。IBM DB2 SQL支持的數(shù)據(jù)類型由表4-3列出,其中,使用最多的是字符型數(shù)據(jù)和數(shù)值型數(shù)據(jù)。,表4-3 IBM DB2 SQL支持的主要數(shù)據(jù)類型,(2) 列級完整性的約束條件。 列級完整性約束是針對屬性值設(shè)置的限制條件。SQL的列級完整性條件有以下幾種: NOT NULL或NULL約束。 UNIQUE約束。 DEFAULT約束。 CHECK約束。,(3) 表級完整性約束條件。 表級完整性約束條件是指涉及到關(guān)系中多個列的限制條件。在上述的CHECK約束中,如果約束條件表達式中涉及到多列數(shù)據(jù),它便為表級約束。,【例4-1】用SQL建立學(xué)生_課程庫中的基本表,其表結(jié)構(gòu)為 學(xué)生(學(xué)號,姓名,年齡,性別,所在系) 課程(課程號,課程名,先行課) 選課(學(xué)號,課程號,成績),2. 修改基本表 當(dāng)已建立好的基本表隨著應(yīng)用環(huán)境和應(yīng)用需求的變化而需要修改時,需要利用SQL的修改基本表語句修改表結(jié)構(gòu)。SQL語言用ALTER TABLE語句來修改基本表,其一般格式為 ALTER TABLE 表名 ADD(新列名 數(shù)據(jù)類型 完整性約束 ,n) DROP 完整性約束名 MODIFY(列名 數(shù)據(jù)類型,n);,(1) 使用ADD子句增加新列。 當(dāng)需要向表中增加新列和新的完整性約束時,使用ADD字句對表結(jié)構(gòu)進行修改操作。 【例4-2】向課程表中增加“學(xué)時”字段。 ALTER TABLE 課程 ADD 學(xué)時 SMALLINT; (2) 使用MODIFY子句修改列的原定義。 (3) 使用DROP子句刪除指定的完整性約束條件。 【例4-3】刪除學(xué)生表中對“年齡”的默認值的定義。,3. 刪除基本表 當(dāng)不再需要某個基本表時,使用DROP TABLE語句刪除它,其一般格式為 DROP TABLE 表名; 基本表一旦被刪除,表中的數(shù)據(jù)及在此表基礎(chǔ)上建立的索引、視圖將自動地全部被刪除掉。因此,執(zhí)行刪除基本表的操作時一定要格外小心。,4.2.2 索引的定義和維護功能 1. 索引的作用 使用索引有以下三方面的作用: (1) 可以明顯地加快數(shù)據(jù)查詢的速度。 (2) 可保證數(shù)據(jù)的惟一性。 (3) 可以加快連接速度。,2. 建立索引的原則 建立索引是加快數(shù)據(jù)查詢的有效手段,在建立索引時,用戶應(yīng)當(dāng)依照以下原則: (1) 索引的建立和維護由DBA和DBMS完成。 (2) 大表應(yīng)當(dāng)建索引,小表則不必建索引。 (3) 對于一個基本表,不要建立過多的索引。 (4) 根據(jù)查詢要求建索引。,3. 建立索引的格式 在SQL語言中,建立索引使用CREATE INDEX語句,其一般格式為 CREATE UNIQUE CLUSTER INDEX 索引名 ON 表名(列名次序,列名次序);,【例4-4】為學(xué)生課程數(shù)據(jù)庫中的學(xué)生、課程和選課三個表建立索引。其中,學(xué)生表按“學(xué)號”升序建立索引;課程表按“課程號”升序建立惟一索引;選課表按“學(xué)號”升序和“課程號”降序建立惟一索引。 CREATE UNIQUE INDEX 學(xué)號ON 學(xué)生(學(xué)號); CREATE UNIQUE INDEX 課程號 ON 課程(課程號); CREATE UNIQUE INDEX 選課號 ON 選課(學(xué)號 ASC,課程號 DESC);,4. 刪除索引 索引一經(jīng)建立,就由系統(tǒng)來選擇和維護,無須用戶干預(yù)。建立索引是為了減少查詢操作的時間,但如果數(shù)據(jù)增、刪、改頻繁,系統(tǒng)就會花費大量的時間來維護索引,這樣就得不償失了,因此,有時需要刪除一些不必要的索引。 SQL語言使用DROP INDEX語句刪除索引,其一般格式為 DROP INDEX 索引名;,【例4-5】刪除學(xué)生表的學(xué)生姓名索引。 DROP INDEX 學(xué)生姓名; 刪除索引時,系統(tǒng)會同時從數(shù)據(jù)字典中刪去有關(guān)對該索引的描述。,4.2.3 視圖的定義和維護功能 視圖是根據(jù)子模式設(shè)計的關(guān)系,它是由一個或幾個基本表(或已定義的視圖)導(dǎo)出的虛表。 1. 視圖的優(yōu)點 合理地使用視圖能夠?qū)ο到y(tǒng)的設(shè)計和用戶的使用帶來很多方便。 (1) 視圖能夠簡化用戶的操作。 (2) 視圖機制可以使用戶以不同的方式看待同一數(shù)據(jù)。 (3) 視圖對數(shù)據(jù)庫的重構(gòu)提供了一定程度的邏輯獨立性。 (4) 視圖可以對機密的數(shù)據(jù)提供安全保護。,2. 視圖定義的格式 SQL語言用CREATE VIEW 來定義視圖,其一般格式為 CREATE VIEW 視圖名 (列名組) AS 子查詢 WITH CHECK OPTION ;,【例4-6】建立計算機系學(xué)生的視圖。 CREATE VIEW 計算機系學(xué)生 AS SELECT 學(xué)號,姓名,年齡 FROM 學(xué)生 WHERE 所在系=計算機系; 例4-6中的視圖是由一個基本表構(gòu)造出的。,【例4-7】由學(xué)生、課程和選課三個表,定義一個計算機系的學(xué)生成績視圖,其屬性包括學(xué)號、姓名、課程名和成績。 【例4-8】將學(xué)生的學(xué)號、總成績、平均成績定義成一個視圖。,3. 視圖的刪除 視圖刪除語句的一般格式為 DROP VIEW 視圖名; 視圖刪除后,視圖的定義將從數(shù)據(jù)字典中刪除,而由該視圖導(dǎo)出的其他視圖的定義卻仍存在于數(shù)據(jù)字典中,但這些視圖已失效。,4. 視圖的查詢和維護 視圖可以和基本表一樣被查詢,其使用方法與基本表相同,但利用視圖進行數(shù)據(jù)增、刪、改操作,會受到一定的限制。,4.3 SQL的數(shù)據(jù)查詢功能,4.3.1 SELECT語句介紹 SQL的數(shù)據(jù)查詢語句中包括SELECT、FROM、WHERE、GROUP BY和ORDER BY子句。SELECT語句具有數(shù)據(jù)查詢、統(tǒng)計、分組和排序的功能,其語句表達能力非常強大。,1. SELECT語句的語法 SELECT語句的語法格式為 SELECT 目標列組 FROM 數(shù)據(jù)源 WHERE 元組選擇條件 GROUP BY 分列組 HAVING組選擇條件 ORDER BY 排序列1 排序要求1,n;,(1) SELECT子句。 (2) FROM子句。 (3) WHERE子句。 (4) GROUP BY子句。 (5) ORDER BY子句。,2. SELECT語句的操作符 (1) 算術(shù)操作符。 算術(shù)操作符在SQL語句中表達數(shù)學(xué)運算操作。SQL的數(shù)學(xué)運算操作符只有四種,它們是:+(加號)、(減號)、*(乘號)和 /(除號)。,(2) 比較操作符。 比較操作符用于測試兩個數(shù)據(jù)是否相等、不等、小于或大于某個值。SQL中的比較操作符包括:=(等于)、(大于)、=(大于等于)、!=或(不等于)、!(不大于)和 !(不小于),共九種操作符。 (3) 邏輯操作符。 SQL的邏輯操作符如表4-4所示。,表4-4 SQL的邏輯操作符,(4) 組合查詢操作符。 組合查詢操作符的使用格式為 查詢1組合操作符查詢2 SQL的組合查詢操作符是針對傳統(tǒng)關(guān)系運算的操作符,它包括UNION、MINUS和INTERSECT三種。 (5) 其他SQL操作符。 其他SQL操作符是針對SELECT子句中的字段表設(shè)計的,它用于簡寫結(jié)果集的字段表和對字段值的限制說明。其他SQL操作符包括 *、ALL和DISTINCT三種。,4.3.2 SQL的查詢實例 SQL的查詢語句可以分為簡單查詢、連接查詢、嵌套查詢和組合查詢四種類型。下面仍以學(xué)生課程數(shù)據(jù)庫為例,介紹各種查詢的描述格式。 學(xué)生課程數(shù)據(jù)庫包括三個基本表,其結(jié)構(gòu)為 學(xué)生(學(xué)號,姓名,年齡,所在系) 課程(課程號,課程名,先行課) 選課(學(xué)號,課程號,成績),1. 簡單查詢 簡單查詢是指在查詢過程中只涉及到一個表的查詢語句。簡單查詢是最基本的查詢語句。 【例4-9】求數(shù)學(xué)系學(xué)生的學(xué)號和姓名。 【例4-10】求選修了課程的學(xué)生學(xué)號。 【例4-11】求選修C1課程的學(xué)生學(xué)號和成績,并要求對查詢結(jié)果按成績的降序排列,如果成績相同則按學(xué)號的升序排列。,【例4-12】求選修課程C1且成績在8090之間的學(xué)生學(xué)號和成績,并將成績乘以系數(shù)0.8輸出。 【例4-13】求數(shù)學(xué)系或計算機系姓張的學(xué)生的信息。 【例4-14】求缺少了成績的學(xué)生的學(xué)號和課程號。,2. 連接查詢 包含連接操作的查詢語句稱為連接查詢。連接查詢包括等值連接、自然連接、求笛卡兒積、一般連接、外連接、內(nèi)連接、左連接、右連接和自連接等多種。由于連接查詢涉及被連接和連接兩個表,所以它的源表一般為多表。,(1) 等值連接和非等值連接操作。 連接查詢中,用來連接兩個表的條件稱為連接條件或連接謂詞。 連接條件的一般格式為 表名1.列名1比較運算符表名2.列名2 其中,比較運算符主要有:=、=、= 和!=。,當(dāng)連接運算符為“=”時,該連接操作稱為等值連接;否則,使用其他運算符的連接運算稱為非等值連接。 當(dāng)?shù)戎颠B接中的連接字段相同,并且在SELECT子句中去除了重復(fù)字段時,則該連接操作為自然連接。,【例4-15】查詢每個學(xué)生的情況以及他(她)所選修的課程。 【例4-16】求學(xué)生的學(xué)號、姓名、選修的課程名及成績。 【例4-17】求選修C1課程且成績?yōu)?0分以上的學(xué)生學(xué)號、姓名及成績。,(2) 自連接操作。 連接操作不只是在兩個表之間進行,一個表內(nèi)還可以進行自身連接操作。表自身的連接操作稱為自連接。 【例4-18】查詢每一門課的間接先行課(即先行課的先行課)。,表4-5 課程表中的數(shù)據(jù),表4-6 課程表自連接操作,(3) 外部連接操作。 在前面連接示例的結(jié)果集中只保留了符合連接條件的元組,而排除了兩個表中沒有對應(yīng)的或匹配的元組情況,這種連接稱為內(nèi)連接。如果要求查詢結(jié)果集中保留非匹配的元組,就要執(zhí)行外部連接操作。,表4-7 職工和部門表數(shù)據(jù),【例4-19】用SQL表達職工和部門的內(nèi)連接、左外部連接和右外部連接的語句分別如下: 內(nèi)連接: SELECT 職工.*,部門名稱,電話 FROM 職工,部門 WHERE 職工.所在部門= 部門.部門號;,左外部連接: SELECT 職工.*,部門名稱,電話 FROM 職工,部門 WHERE 職工.所在部門*= 部門.部門號; 右外部連接: SELECT 職工.*,部門名稱,電話 FROM 職工,部門 WHERE 職工.所在部門 =* 部門.部門號;,表4-8 職工和部門表各種連接的結(jié)果集對照表,3. 嵌套查詢 在SQL語言中,一個SELECTFROMWHERE語句稱為一個查詢塊。將一個查詢塊嵌套在另一個查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢。 (1) 使用IN操作符的嵌套查詢。 當(dāng)IN操作符后的數(shù)據(jù)集需要通過查詢得到時,就需要使用IN嵌套查詢。 【例4-20】求選修了高等數(shù)學(xué)的學(xué)生學(xué)號和姓名。,(2) 使用比較符的嵌套查詢。 IN操作符用于一個值與多值比較,而比較符則用于一個值與另一個值之間的比較。當(dāng)比較符后面的值需要通過查詢才能得到時,就需要使用比較符嵌套查詢。 【例4-21】求C1課程的成績高于張三的學(xué)生學(xué)號和成績。 (3) 使用ANY或ALL操作符的嵌套查詢。,表4-9 ANY和ALL與比較符結(jié)合的操作符及其語意表,【例4-22】求其他系中比計算機系某一學(xué)生年齡小的學(xué)生(即求年齡小于計算機系年齡最大者的學(xué)生)。 【例4-23】求其他系中比計算機系學(xué)生年齡都小的學(xué)生。,(4) 使用EXISTS操作符的嵌套查詢。 【例4-24】求選修了C2課程的學(xué)生姓名。 【例4-25】求沒有選修C2課程的學(xué)生姓名。 【例4-26】查詢選修了全部課程的學(xué)生的姓名。 【例4-27】求至少選修了學(xué)號為“S2”的學(xué)生所選修的全部課程的學(xué)生學(xué)號和姓名。,4. 組合查詢 將SELECT語句的查詢結(jié)果集再進行集合運算就構(gòu)成了SQL的組合查詢。SQL的組合查詢操作符有UNION(并操作)、INTERSECT(交操作)和MINUS(差操作)三種。 【例4-28】求選修了C1課程或選修了C2課程的學(xué)生學(xué)號。 【例4-29】求選修C1課程,并且也選修C2課程的學(xué)生學(xué)號。,【例4-30】求選修了C1課程但沒有選修C2課程的學(xué)生學(xué)號。,表4-10 基本的SQL函數(shù),5. 使用分組和SQL函數(shù)查詢 SQL函數(shù)是綜合信息的統(tǒng)計函數(shù),包括計數(shù)、求最大值、求最小值、求平均值、求和值等。SQL函數(shù)可作為列標識符出現(xiàn)在SELECT子句的目標列或HAVING子句的條件中。 【例4-31】求學(xué)生的總?cè)藬?shù)。 【例4-32】求選修了課程的學(xué)生人數(shù)。 【例4-33】求課程和選修該課程的人數(shù)。 【例4-34】求選修課超過三門課的學(xué)生學(xué)號。,4.4 SQL的數(shù)據(jù)更新功能,4.4.1 SQL的數(shù)據(jù)插入功能 SQL的數(shù)據(jù)插入語句有兩種使用形式:一種是使用常量,一次插入一個元組;另一種是插入子查詢的結(jié)果,一次插入多個元組。,1. 使用常量插入單個元組 使用常量插入單個元組的INSERT語句的格式為 INSERT INTO 表名(屬性列1,屬性列2) VALUES (常量1,常量2);,【例4-35】將一個新學(xué)生記錄(學(xué)號:03010,姓名:張三,年齡:20,所在系:計算機系 ) 插入到學(xué)生表中。 【例4-36】插入一條選課記錄(學(xué)號:03011,課程號:C10,成績不詳)。,2. 在表中插入子查詢的結(jié)果集 如果插入的數(shù)據(jù)需要查詢才能得到,就需要使用插入子查詢結(jié)果集的INSERT語句。SQL允許將查詢語句嵌到數(shù)據(jù)插入語句中,以便將查詢得到的結(jié)果集作為批量數(shù)據(jù)輸入到表中。含有子查詢的INSERT語句的格式為 INSERT INTO 表名(屬性列1,屬性列2) 子查詢; 【例4-37】求每個系學(xué)生的平均年齡,并把結(jié)果存入數(shù)據(jù)庫中。,4.4.2 SQL的數(shù)據(jù)修改功能 SQL修改數(shù)據(jù)操作語句的一般格式為 UPDATE 表名 SET 列名=表達式,列名=表達式,n WHERE 條件;,【例4-38】將學(xué)生表中全部學(xué)生的年齡加上2歲。 【例4-39】將選課表中的數(shù)據(jù)庫課程的成績乘以1.2。,4.4.3 SQL的數(shù)據(jù)刪除功能 數(shù)據(jù)刪除語句的一般格式為 DELETE FROM 表名 WHERE 條件; DELETE語句的功能是從指定表中刪除滿足WHERE子句條件的所有元組。 【例4-40】刪除管理系的學(xué)生記錄及選課記錄。,4.5 嵌 入 式 SQL,4.5.1 嵌入式SQL的特點 SQL的功能只包括數(shù)據(jù)定義功能DDL、數(shù)據(jù)操縱功能DML和數(shù)據(jù)控制功能DCL,而缺少程序設(shè)計必要的程序流程控制和交互式功能,也缺少一些專業(yè)應(yīng)用的功能,例如SQL沒有分支、循環(huán)、賦值等語句等。,1. 區(qū)別SQL和主語言 在嵌入式SQL中,為了能夠區(qū)分SQL語句與主語言語句,必須在所有的SQL語句前面加上前綴EXEC SQL。SQL語句的結(jié)束標志則隨主語言的不同而不同。,2. 使數(shù)據(jù)庫的工作單元與程序工作單元之間能夠通信 在含有嵌入式SQL的應(yīng)用程序中,SQL語句負責(zé)管理數(shù)據(jù)庫,主語言語句負責(zé)控制程序流程和其他功能。數(shù)據(jù)庫的工作單元和程序工作單元之間通信的主要方式有以下兩種: (1) 主語言通過主變量向SQL語句提供參數(shù)。 (2) SQL語句的當(dāng)前工作狀態(tài)和運行環(huán)境數(shù)據(jù)要反饋給應(yīng)用程序。,3. 使用游標解決SQL一次一集合的操作與主語言一次一記錄操作的矛盾 SQL語言與主語言具有不同的數(shù)據(jù)處理方式。,4.5.2 不用游標的SQL語句 1. 幾種不需要使用游標的SQL語句 下面四種SQL語句不需要使用游標: (1) 用于說明主變量的說明性語句。 (2) 數(shù)據(jù)定義和數(shù)據(jù)控制語句。 (3) 查詢結(jié)果為單記錄的查詢語句。 (4) 數(shù)據(jù)的插入語句和某些數(shù)據(jù)刪除、修改語句。,2. 不用游標的查詢語句 不用游標的查詢語句的一般格式為 EXEC SQL SELECT ALL|DISTINCT 目標列表達式,n INTO 主變量 指示變量,n FROM 表名或視圖名,n WHERE 條件表達式;,【例4-41】查詢學(xué)號為主變量givesno的值、課號為主變量givecno的值的學(xué)生選課記錄。,3. 不用游標的數(shù)據(jù)維護語句 (1) 不用游標的數(shù)據(jù)刪除語句。 在刪除語句中,WHERE子句的條件中可以使用主變量。 【例4-42】刪除學(xué)號由主變量Sno決定的學(xué)生記錄。 【例4-43】將計算機系所有學(xué)生的年齡都加上主變量Raise。 【例4-44】將計算機系學(xué)生的年齡置空。,(3) 不用游標的數(shù)據(jù)插入語句。 INSERT語句的VALUES子句可以使用主變量和指示變量,當(dāng)需要插入空值時,可以把指示變量置為負值。 【例4-45】將學(xué)號由主變量Sno、課程號由Cno決定的選課記錄插入到數(shù)據(jù)庫中。,4.5.3 使用游標的SQL 游標機制用于解決SQL查詢結(jié)果為集合而主語言處理方式為記錄方式的矛盾。在處理中,必須使用游標的SQL語句有兩種:一種是查詢結(jié)果為多條記錄的SELECT語句;另一種是使用游標的DELETE語句和UPDATE語句。,1. 定義游標命令 游標通過DECLARE語句定義,其語句格式為 EXEC SQL DECLARE 游標名 CURSOR FOR 子查詢 FOR UPDATE OF 字段名1,n; 【例4-46】定義按主變量DEPT查詢系里學(xué)生的游標。,2. 打開游標命令 游標通過OPEN命令打開,打開游標語句的格式為 EXEC SQL OPEN 游標名; OPEN語句的作用是執(zhí)行游標對應(yīng)的查詢語句,并將游標指向結(jié)果集的第一條記錄前。 【例4-47】打開SX游標。,3. 推進游標命令 游標通過FETCH命令向前(或稱向下)推進一條記錄。推進游標的語句格式為 EXEC SQL FETCH 游標名 INTO 主變量組; 推進游標的作用是將游標下移一行,讀出當(dāng)前的記錄,將當(dāng)前記錄的各數(shù)據(jù)項值放到INTO后的主變量組中。 【例4-48】將打開的指向系的游標向前推進。,4. 關(guān)閉游標命令 由于許多系統(tǒng)允許打開的游標數(shù)有一定的限制,所以當(dāng)數(shù)據(jù)處理完后應(yīng)及時把不使用的游標關(guān)閉,以釋放結(jié)果集占用的緩沖區(qū)及其他資源。 關(guān)閉游標使用CLOSE命令,CLOSE命令的具體格式為 EXEC SQL CLOSE 游標名;,4.6 SQL的數(shù)據(jù)控制功能,4.6.1 數(shù)據(jù)控制的方法 數(shù)據(jù)庫系統(tǒng)通過以下三步來實現(xiàn)數(shù)據(jù)控制。 1. 授權(quán)定義 具有授權(quán)資格的用戶,如數(shù)據(jù)庫管理員DBA或建表戶DBO,通過數(shù)據(jù)控制語言DCL,將授權(quán)決定告知數(shù)據(jù)庫管理系統(tǒng)。,2. 存權(quán)處理 數(shù)據(jù)庫管理系統(tǒng)DBMS把授權(quán)的結(jié)果編譯后存入數(shù)據(jù)字典中。 3. 查權(quán)操作 當(dāng)用戶提出操作請求時,系統(tǒng)首先要在數(shù)據(jù)字典中查找該用戶的數(shù)據(jù)操作權(quán)限,當(dāng)用戶擁有該操作權(quán)時才能執(zhí)行其操作,否則系統(tǒng)將拒絕其操作。,4.6.2 SQL Server的數(shù)據(jù)庫操作權(quán)限 1. 隱含特權(quán) 隱含特權(quán)是系統(tǒng)內(nèi)置權(quán)限,是用戶不需要進行授權(quán)就可擁有的數(shù)據(jù)操作權(quán)。 2. 系統(tǒng)特權(quán) 系統(tǒng)特權(quán)又稱為語句特權(quán),它相當(dāng)于數(shù)據(jù)定義語句DLL的語句權(quán)限。 不同的數(shù)據(jù)庫系統(tǒng)規(guī)定的系統(tǒng)權(quán)限不同,SQL Server中的系統(tǒng)特權(quán)如表4-11所示。,表4-11 SQL Server中的系統(tǒng)特權(quán),3. 對象特權(quán) 對象特權(quán)類似于數(shù)據(jù)庫操作語言DML的語句權(quán)限,它指用戶對數(shù)據(jù)庫中的表、視圖、存儲過程等對象的操作權(quán)限。SQL Server中的對象特權(quán)如表4-12所示。,表4-12 SQL Server中的對象特權(quán),4.6.3 數(shù)據(jù)操作權(quán)限的設(shè)置 數(shù)據(jù)操作權(quán)限的設(shè)置語句包括授權(quán)語句、收權(quán)語句和拒絕訪問語句三種。 1. 授權(quán)語句 系統(tǒng)授權(quán)的授權(quán)語句格式為 GRANT 系統(tǒng)特權(quán)組 To 用戶組| PUBLIC WITH GRANT OPTION;,【例4-49】把修改學(xué)生學(xué)號和查詢學(xué)生表的權(quán)力授予用戶王平。 【例4-50】把建立數(shù)據(jù)庫和備份數(shù)據(jù)庫的權(quán)力賦給用戶王平。,2. 收權(quán)語句 數(shù)據(jù)庫管理員DBA、數(shù)據(jù)庫擁有者(建庫戶)DBO或數(shù)據(jù)庫對象擁有者DBOO(數(shù)據(jù)庫對象主要是基本表)可以通過REVOKE語句將其他用戶的數(shù)據(jù)操作權(quán)收回。 REVOKE語句的一般格式為 REVOKE 權(quán)限組|ALL PRIVILIGES ON 對象名 FROM 用戶名組| PUBLIC; 【例4-51】將用戶王平的可以在學(xué)生表中修改學(xué)生學(xué)號的權(quán)利收回。,3. 拒絕訪問語句 拒絕訪問語句的一般格式為 DENY ALL PRIVILIGES | 權(quán)限組 ON 對象名 TO 用戶組 | PUBLIC; 其中,ON子句用于說明對象特權(quán)的對象名;對象名指的是表名、視圖名、視圖和表的字段名或者過程名。,習(xí) 題 4,4.1 試述SQL語言的特點。 4.2 在嵌入式SQL中,如何區(qū)分SQL語句和主語言語句? 4.3 SQL語言集數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制功能于一體,語句INSERT、DELETE、UPDATE實現(xiàn)_功能。 A. 數(shù)據(jù)查詢 B. 數(shù)據(jù)操縱 C. 數(shù)據(jù)定義 D. 數(shù)據(jù)控制,4.4 下面列出的關(guān)于視圖(VIEW)的條目中,不正確的是_。 A. 視圖是外模式 B. 視圖是虛表 C. 使用視圖可以加快查詢語句的執(zhí)行速度 D. 使用視圖可以簡化查詢語句的編寫 4.5 在SQL語言的SELECT語句中,實現(xiàn)投影操作的是_子句。 A. SELECT B. FROM C. WHERE D. GROUP BY,4.6 SQL語言集數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制功能于一體,語句ALTER TABLE實現(xiàn)_功能。 A. 數(shù)據(jù)查詢 B. 數(shù)據(jù)操縱 C. 數(shù)據(jù)定義 D. 數(shù)據(jù)控制 4.7 在關(guān)系數(shù)據(jù)庫系統(tǒng)中,為了簡化用戶的查詢操作,而又不增加數(shù)據(jù)的存儲空間,常用的方法是創(chuàng)建_。 A. 另一個表 B. 游標 C. 視圖 D. 索引,4.8 設(shè)職工_社團數(shù)據(jù)庫有三個基本表: 職工(職工號,姓名,年齡,性別) 社會團體(編號,名稱,負責(zé)人,活動地點) 參
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 神經(jīng)外科的試題及答案
- 2024年紡織品設(shè)計師資源整合試題及答案
- 如何準確把握國際商業(yè)美術(shù)設(shè)計師考試的設(shè)計方向與試題及答案
- 2024廣告設(shè)計師設(shè)計理念試題及答案
- 直擊要點國際商業(yè)美術(shù)設(shè)計師試題及答案
- 2024年紡織工程師考試的組織優(yōu)化試題及答案
- 大一臨床檢驗試題及答案
- 助理廣告師考試社會經(jīng)驗與職業(yè)技能結(jié)合試題及答案
- 中考沖刺數(shù)學(xué)試題及答案
- 2024年紡織工程師考試全景規(guī)劃試題及答案
- 【應(yīng)收賬款管理問題及完善策略:以S建工集團公司為例9800字(論文)】
- 2024綠色工業(yè)園區(qū)評價通則
- DL-T5372-2017水電水利工程金屬結(jié)構(gòu)與機電設(shè)備安裝安全技術(shù)規(guī)程
- 人教版數(shù)學(xué)《認識鐘表》公開課課件1
- Pep 新版小學(xué)英語六年級下冊一般過去時復(fù)習(xí)課教案
- 兒科入院安全宣教
- 082023年青島西海岸新區(qū)中考自主招生化學(xué)模擬題
- 上海大學(xué)繼續(xù)教育市場營銷網(wǎng)課答案更新版
- 電氣工程及其自動化新能源發(fā)電方向
- 2024年3月濟南市2024屆高三模擬考試(一模)英語試卷(含答案)
- 庫侖定律(公開課)完整版
評論
0/150
提交評論