復習要點和答案2022/8/5 0:00:00
復習要點1、關系數據庫的基本概念2、數據庫的邏輯結構和物理結構、數據庫的分類(各個系統數據庫的作用)、用sql語句創建、管理和刪除數據庫。SQL 數據庫是存儲數據的容器,是一個存放數據的表和支持這些數據的存儲、檢索、安全性和完整性的邏輯成分所組成的集合。用戶觀點將數據庫稱為邏輯數據庫,組成數據庫的邏輯成分稱為數據庫對象。SQL 2005的數據庫對象主要包括表、視圖、索引、存儲過程、觸發器和約束等。從物理結構看,SQL 將數據庫映射為一組操作系統文件,一般一個數據庫被組織成數據文件和日志文件兩種類型。●系統數據庫系統數據庫是在SQL 的每個實例中都存在的標準數據庫,用于存儲有關SQL 的信息,SQL 使用系統數據庫來管理系統。?數據庫數據庫是SQL 中的總控數據庫,是最重要的系統數據庫。系統是根據數據庫中的信息來管理系統和其他數據庫。如果數據庫信息被破壞,整個SQL 系統將受到影響,用戶數據庫將不能被使用。?model數據庫model(模板)數據庫是為用戶建立新數據庫提供模板和原型,它包含了將復制到每個新建數據庫中的系統表?msdb數據庫msdb數據庫支持SQL 代理。
當代理程序調度作業、記錄操作時,系統要用到或實時產生很多相關信息,這些信息一般存儲在msdb數據庫中。?數據庫數據庫是一個臨時數據庫,保存所有的臨時表、臨時數據以及臨時創建的存儲過程。?數據庫數據庫是一個只讀和隱藏的數據庫,包含SQL 所有的系統對象。(系統對象在物理上保存在 中,邏輯上顯示在每個數據庫的sys構架中)3、用sql語句創建、刪除、管理表結構;插入、修改、刪除表數據;各種約束的創建和作用(主鍵約束、唯一性約束、檢查約束、默認約束、外鍵約束),數據完整性的分類和實現。實體完整性約束、參照完整性約束、函數依賴約束、統計約束四類。實體完整性實體完整性是指一個關系中所有主屬性(即主碼的屬性)不能取空值。所謂“空值”就是“不知道”或“無意義”的值。如主屬性取空值,就說明某個不可標識的實體,這與現實世界的應用環境相矛盾,因此這個實體一定不是完整的實體。參照完整性約束參照完整性約束是指參照關系中外碼的取值或者是空值(外碼的每個屬性均為空值)或者是取被參照關系中某個元組的主碼值。下面舉例說明。現有兩個關系模式:學生(學號,姓名,性別,專業號,年齡)和專業(專業號,專業名)。
在實現參照完整性時要注意以下幾個問題:①外碼是否可以接受空值。因為外碼能否為空是依賴于應用環境的,如有兩個關系模式分別為選修(學號,課程好,成績)學生(學號,姓名,性別,年齡,所在系),選修關系中的外碼“學號”不能為空,如果為空,說明某個不知學號的學生選修了某門課程,這與學校的應用環境不符。②刪除被參照關系的原組時的考慮。有時需要刪除被參照關系的某個原組,而參照關系中又有若干原組的外碼值與被刪除的被參照關系中的主碼值相對應,這時要進行級聯刪除,即將參照關系中的所有外碼值與被參照關系中要刪除元組主碼值相對應的元組一起刪除,如果參照關系同時又是另一個關系的被參照關系則這種級聯刪除應該級聯刪除應該級聯下去。③修改被參照關系中主碼時的考慮。遇到這種情況時,做法同刪除被參照關系的元組類似,要做級聯修改,既修改被參照關系中主碼值的同時,用相同的方法修改參照關系中相應的外碼值。函數依賴約束大部分函數依賴約束都是隱含在關系模式結構中,特別是規范化程度較高的關系模式(如3NF或BCNS)都由模式來保持函數依賴。在實際應用中,為了不使信息過于分離,一般不能過分地追求規范化。這樣在關系的字段間就可以存在一些函數要顯式地表示出來。
系統約束即某個字段值與一個關系多個元組的統計值之間的約束關系。如,本部門經理的工資不得高于本部門職工的平均工資的5倍。其中職工的平均工資值是一個統計計算值。在許多場合,統計數據往往可以公開,而個別數據卻是保密的,但是個別數據值可以從統計數據推斷出來,所以要采取一定的防范措施防止數據泄密。4、各類數據查詢語句(基本查詢、分組查詢、連接查詢、嵌套查詢)5、索引的類型和作用,用sql語句創建索引。索引的類型和作用,用sql語句創建索引。聚集索引將表中的記錄在物理數據頁中的位置按索引字段值重新排序,再將重排后的結果寫回到磁盤上。非聚集索引唯一索引確保索引鍵不包含重復的值。復合索引在對數據表創建索引時,有時創建基于單個字段的索引不能滿足查詢要求,這時需要對表創建多個字段的索引,這樣的索引稱為復合索引。索引視圖如果視圖基表的數據量很大,并且不常被更新,而在查詢中頻繁地引用這類視圖,可通過對視圖創建唯一聚集索引來提高性能。全文索引一種特殊類型的基于標記的功能性索引,由 SQL 全文引擎()服務創建和維護。用于幫助在字符串數據中搜索復雜的詞。XML索引當一個查詢是基于XML數據類型列時,為了提高查詢速度6、視圖的概念,用sql語句創建、修改和刪除視圖視圖是個虛表,是從一個或者多個表或視圖中導出的表,其結構和數據是建立在對表的查詢基礎上的。
7、數據庫對象的命名規則、局部變量的創建和賦值方法、用戶自定義函數的類型,各類自定義函數的創建和調用、各種流程控制語句的使用方法8、游標的使用方法(填空)、事務的概念和作用(簡答)、使用方法。(選擇)a)事務()是SQL 中的單個邏輯工作單元,也是一個操作序列,它包含了一組數據庫操作命令。一個事務內的所有語句被作為一個整體執行。在事務執行過程中,如果遇到錯誤,則可以回滾事務,取消該事務所做的全部改變,從而保證數據庫的一致性和完整性。因此,事務是一個不可分割的工作邏輯單元,一個事務中的語句要么全部正確執行,要么全部不起作用。b)事務作為一個邏輯工作單元必須具有四個屬性:原子性()、一致性()、隔離性()和持久性()。這四個屬性簡稱ACID屬性。9、各類存儲過程的創建和使用方法(不帶參數、帶輸入參數、帶輸出參數、帶返回值)10、觸發器與存儲過程的區別和聯系簡答),DML觸發器的創建和使用11、身份驗證模式,登錄賬戶、用戶、角色的創建和使用方法,權限的授予、拒絕和回收12、備份的作用、類型,恢復模式對備份的影響,利用sql語句備份和恢復數據庫。
題型:一、選擇(20題,20分)全部內容二、判斷(10題,10分)全部內容三、簡答(2題,10分)見要點四、綜合應用題(本題共11小題,共60分)示例:現有關系數據庫如下:數據庫名:員工管理,包括如下兩張表(1)員工表(員工號 char(6),姓名char(10),性別 char(2),民族 char(10)學歷 char(4),出生日期 , 工作時間 ,身份證號char(18),部門號 char(3))(2)部門表(部門號 char(3),部門名稱 char(20),備注 (100)) 寫出或補充完整實現如下功能的sql語句代碼:1、創建“員工管理”數據庫,包含一個數據文件和一個日志文件,保存在目錄D:\data\ 下。數據文件的邏輯名為,物理文件名為.mdf,初始大小為10MB,最大可增加至50MB,增幅為10%;日志文件的邏輯名為,物理文件名為.ldf,初始大小為5MB,最大值為100MB,以2MB增幅增加。請將創建數據庫代碼填寫完整。
(每空1分,共4分)2.假設數據庫和部門表已經創建,寫出創建員工表的代碼。(8分)要求在建表時設置主鍵(員工號)和外鍵(部門號),并添加如下約束:姓名字段不允許為空(not null)、民族字段設置默認值()為’漢’、身份證號設為唯一()、性別字段只能取’男’或‘女’(check) 3.將下列部門信息添加到部門表,添加完成后將部門號為‘001’的部門名稱修改為“信息中心”,然后刪除部門號為‘002’的部門信息(4分)部門號部門名稱001財務部002組織部4.查詢員工表中年齡大于50歲的員工信息,并將結果按部門排序。(4分)5.分組統計每個部門的員工人數,并輸出員工人數大于10人的部門號和人數。(4分)6.查詢與“張三”在同一個部門的員工姓名,學歷和民族。(4分)7.創建視圖關系數據庫的邏輯結構,包括字段員工號, 姓名, 性別 , 民族, 身份證號,部門名稱等字段(4分)。8.自定義函數fun1,利用該函數可以查看某部門是否編制已滿,如果部門人數小于20人,則顯示“編制未滿”,否則顯示“編制已滿”,并調用該函數查詢‘001’部門編制情況。(每空2分,共8分)9.定義游標查詢001部門的員工姓名和總人數.請將下面程序補充完整(每空2分,共8分)。
10.創建帶參數的存儲過程,輸入一個部門號,可以查看該部門的員工姓名,性別和部門名稱關系數據庫的邏輯結構,并執行此過程,查詢'001’部門情況。 (8分)11.為員工管理數據庫創建一個登陸賬戶,登陸名為T1,密碼是;然后創建一個數據庫用戶T1,其登錄名為T1,并將查詢、修改部門表的權限賦予該用戶。(4分)答案:1、 員工管理ON(NAME= ,='d:\data\.mdf',SIZE=10mb,=50mb,=10%)log on(NAME=,='d:\data\.ldf',SIZE=5mb,=100mb,=2MB)2、(8分,建基本表和主鍵4分,添加約束4分) table員工表(員工號char(6) key,姓名char(10)not null,性別char(2)check(性別='男'or性別='女'),民族char(10)'漢',出生日期,工作時間,身份證號char(18),部門號char(3)部門表(部門號))注:所有約束可以設置在列之后,也可以單獨設定。
當主碼中字段多余一個時必須單獨設定。如上題可在所有字段定義后,用 key(員工號), key部門號 部門表(部門號)單獨設定主碼和外碼3、(每題1分,共4分) into部門表('001','財務部') into部門表('002','組織部')部門表set部門名稱='信息中心'where部門號='001' from部門表where部門號='002'4、(共4分)*from員工表where(year(())-year(出生日期))> by部門號5、(共4分)部門號,count(員工號)from員工表group by部門號 count(員工號)>106、(4分)姓名,學歷,民族from員工表where部門號=(部門號from員工表where姓名='張三')7、(4分) view 員工號,姓名,性別,民族,身份證號,部門名稱from員工表,部門表where員工表.部門號=部門表.部門號8、(每空2分,共8分) fun1(@ as char(3))--創建函數 char(10) @ int,@dep char(10)--找出該部門的人數,并賦值給變量 @=count(員工號)from員工表where部門號=@ if @