數(shù)據(jù)庫原理與應(yīng)用期末復(fù)習(xí)大綱
1. 數(shù)據(jù)庫系統(tǒng)組成。
? 數(shù)據(jù)庫系統(tǒng)(DataBase System,DBS)是采用了數(shù)據(jù)庫技術(shù)的計(jì)算機(jī)系統(tǒng),一般由數(shù)據(jù)庫、數(shù)據(jù)庫管理 系統(tǒng)(及相關(guān)使用工具)、應(yīng)用系統(tǒng)、數(shù)據(jù)庫管理員構(gòu)成。
? 數(shù)據(jù)庫系統(tǒng)是引入了數(shù)據(jù)庫及時(shí)的計(jì)算機(jī)系統(tǒng),一般由數(shù)據(jù)庫,支持?jǐn)?shù)據(jù)庫運(yùn)行的軟硬件,數(shù)據(jù)庫管理系統(tǒng) (及其開發(fā)工具)、應(yīng)用程序、數(shù)據(jù)庫管理員和用戶組成。
數(shù)據(jù)庫系統(tǒng)的硬件平臺及數(shù)據(jù)庫:
- 硬件
- 數(shù)據(jù)庫
軟件:
- 數(shù)據(jù)庫管理系統(tǒng)
- 操作系統(tǒng)
- 高級語言和應(yīng)用開發(fā)工具
人員:
- 數(shù)據(jù)庫管理員
- 系統(tǒng)分析員和數(shù)據(jù)庫設(shè)計(jì)人員
- 應(yīng)用程序員
- 用戶
2. 數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)、外模式/模式映像、模式/內(nèi)模式映像。
? 數(shù)據(jù)庫系統(tǒng)采用三級模式結(jié)構(gòu),三級模式之間形成了兩級映像,從而實(shí)現(xiàn)了較高的數(shù)據(jù)獨(dú)立柱(三級模式/ 兩級映像)
? 三級模式:
* 外模式:也稱為子模式或者用戶模式,它是數(shù)據(jù)庫用戶(包括應(yīng)用程序員和最終用戶)看見和使用的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是數(shù)據(jù)庫用戶的數(shù)據(jù)視圖,是與某一應(yīng)用有關(guān)的數(shù)據(jù)的邏輯表示。外模式通常是模式的子集。一個(gè)數(shù)據(jù)庫可以有多個(gè)外模式。外模式是保證數(shù)據(jù)庫安全性的一個(gè)有力措施。由于它是用戶的數(shù)據(jù)視圖,如果不同用戶在應(yīng)用需求,看待數(shù)據(jù)的方式,對數(shù)據(jù)保密的要求等方面存在差異,則他們的外模式描述是不同的,既然數(shù)據(jù)是來自同一數(shù)據(jù)庫,但在外模式中的結(jié)構(gòu)、類型、長度、保密級等都可以不同。因此用戶根據(jù)不同請求,看到的結(jié)果是不同的,并且每個(gè)用戶看到的結(jié)果對應(yīng)外模式中的數(shù)據(jù),數(shù)據(jù)庫中的其余數(shù)據(jù)對他們來說是不可見的。DBMS通過DML對數(shù)據(jù)記錄進(jìn)行操作
* 模式:模式也稱為概念模式或邏輯模式,是數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征描述,它是數(shù)據(jù)庫系統(tǒng)模式結(jié)構(gòu)的中間層,既不涉及數(shù)據(jù)的物理存儲(chǔ)細(xì)節(jié)和硬件環(huán)境,也與具體應(yīng)用程序無關(guān)。模式實(shí)際上是數(shù)據(jù)庫中數(shù)據(jù)在邏輯上的視圖。一個(gè)數(shù)據(jù)庫只有一個(gè)模式。數(shù)據(jù)庫的模式以某一種數(shù)據(jù)模型為基礎(chǔ),同時(shí)考慮了所有用戶的需求,并將這些需求有機(jī)地結(jié)合成一個(gè)邏輯整體。DBMS通過DDL定義數(shù)據(jù)的模式,同時(shí)還需要定義數(shù)據(jù)之間的聯(lián)系及相關(guān)的安全性,完整性約束條件。
* 內(nèi)模式:內(nèi)模式也稱為存儲(chǔ)模式,它是數(shù)據(jù)物理結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)的底層描述,是數(shù)據(jù)在數(shù)據(jù)庫內(nèi)部的表示方式。例如,記錄的存儲(chǔ)方式是順序存儲(chǔ)、按照B+樹結(jié)構(gòu)存儲(chǔ)還是按照Hash方法存儲(chǔ);索引按照什么方式組織;數(shù)據(jù)是否壓縮存儲(chǔ),是否加密;數(shù)據(jù)的存儲(chǔ)記錄有何規(guī)定等。一個(gè)數(shù)據(jù)庫只有一個(gè)內(nèi)模式。
? 兩級映像:
- 外模式/模式映像:定義了該外模式與模式之間的對應(yīng)關(guān)系。對于每一個(gè)外模式,數(shù)據(jù)庫系統(tǒng)都有一個(gè)外模式/模式映像。這些映像定義通常包含在各自外模式的描述中。當(dāng)模式改變時(shí),由數(shù)據(jù)庫管理員對各個(gè)外模式/模式的映像作相應(yīng)改變,外模式可以保持不變,從而不必修改應(yīng)用程序,實(shí)現(xiàn)數(shù)據(jù)的邏輯獨(dú)立性。如在模式中增加新的記錄類型(只要不破壞原有記錄類型之間的聯(lián)系型);在原有記錄類型之間增加新的聯(lián)系;在某些記錄類型中增加新的數(shù)據(jù)項(xiàng)。
- 模式/內(nèi)模式映像。數(shù)據(jù)庫中只有一個(gè)模式,也只有一個(gè)內(nèi)模式,所以模式/內(nèi)模式映像是唯一的,它定義了數(shù)據(jù)全局邏輯結(jié)構(gòu)與存儲(chǔ)結(jié)構(gòu)之間的對應(yīng)關(guān)系。該映像定義通常包含在模式描述中。當(dāng)數(shù)據(jù)庫的存儲(chǔ)結(jié)構(gòu)改變了,由數(shù)據(jù)庫管理員對模式/內(nèi)模式映像作相應(yīng)改變,可以使模式保持不變,從而保證數(shù)據(jù)的物理獨(dú)立性。如改變存儲(chǔ)設(shè)備或引進(jìn)新的存儲(chǔ)設(shè)備;改變數(shù)據(jù)的存儲(chǔ)位置;改變存儲(chǔ)記錄的體積;改變數(shù)據(jù)組織方式。
3. SQL語言中,創(chuàng)建、修改、刪除一個(gè)表的命令。
創(chuàng)建表:
CREATE TABLE Student
(Sno CHAR(10) NOT NULL,
? PRIMARY KEY(Sno),
? Sname CHAR(10),
? Ssex CHAR(2),
? Sage INT,
? Sdept CHAR(20),
Foregin KEY(Sno) reference Student(Sno)
)
修改表:
ALTER TABLE Student
? ADD Room CHAR(8) NULL
ALTER TABLE Student
? ALTER COLUMN Room CHAR(6)
ALTER TABLE Student
? DROP COLUMN Room
刪除表:
DROP TABLE Test[restrict|cascade]前者限制刪除的表不能被其他表引用,如果存在依賴則不能刪除。后者無限制,刪除基本表的同時(shí),相關(guān)的依賴依賴對象也會(huì)一起刪除。
4. 關(guān)系R和S進(jìn)行自然連接的條件。
當(dāng)“=”時(shí)連接運(yùn)算稱為等值連接。它是從關(guān)系R和S的廣義笛卡爾積中選取A,B屬性值相等的元組。
自然連接是特殊的等值連接,它要求兩個(gè)關(guān)系中進(jìn)行比較的分量必須是相同的屬性,并且在結(jié)果中把重復(fù)的屬性列去掉。
一般連接運(yùn)算是從行的角度進(jìn)行運(yùn)算的,但自然連接還需要去掉重復(fù)的列,所以同時(shí)從行和列的角度進(jìn)行運(yùn)算
自然連接和等值連接的差別如下:
- 自然連接要求相等的分量必須具有相同的屬性名,等值連接則不要求
- 自然連接要求把重復(fù)的屬性名去掉,等值連接卻不需要這樣做。
5. 選擇、投影、并、交、差運(yùn)算。交不是基本的關(guān)系代數(shù)運(yùn)算,交可以被差運(yùn)算取代。
選擇、投影、并、交、差運(yùn)算。交不是基本的關(guān)系代數(shù)運(yùn)算,交可以被差運(yùn)算取代。
6.關(guān)系數(shù)據(jù)庫三個(gè)完整性、實(shí)體完整性約束通過主碼來實(shí)現(xiàn),參照完整性約束可以通過外碼來實(shí)現(xiàn)。
關(guān)系模型中允許定義三類完整性約束:實(shí)體完整性約束,參照完整性約束,用戶定義的完整性約束。其中實(shí)體完整性是規(guī)定表的每一行在表中是唯一的實(shí)體。參照完整性是指兩個(gè)表的主關(guān)鍵字和外關(guān)鍵字的數(shù)據(jù)應(yīng)該一致,保證了表之間的數(shù)據(jù)的一致性,防止了數(shù)據(jù)丟失或無意義的數(shù)據(jù)在數(shù)據(jù)庫中擴(kuò)散。這兩個(gè)約束是由關(guān)系系統(tǒng)自動(dòng)支持的。用戶定義的完整性是針對某個(gè)特定關(guān)系數(shù)據(jù)庫的約束條件,它反映某一具體應(yīng)用必須滿足的語義要求;
7. 超碼、候選碼、主碼、外碼。
- 超碼:是一個(gè)或多個(gè)屬性的集合,這些屬性可以讓我們在一個(gè)實(shí)體集中唯一地標(biāo)識一個(gè)實(shí)體。一個(gè)關(guān)系可能有多個(gè)超碼。如果K是一個(gè)超碼,那么K的任意超集也是超碼,也就是說如果K是超碼,那么所有包含K的集合也是超碼。
- 候選碼:是從超碼中選出的,自然地,候選碼也是一個(gè)或多個(gè)屬性的集合。一個(gè)關(guān)系可能有多個(gè)候選碼。候選碼是最小超碼,它們的任意真子集都不能成為超碼。例如,如果K是超碼,那么所有包含K的集合都不能是候選碼;如果K、J都不是超碼,那么K和J組成的集合(K,J)有可能是候選碼。
- 主碼:是從多個(gè)候選碼中任意選出的一個(gè),如果候選碼只有一個(gè),那么該候選碼就是主碼。雖然說主碼的選擇是比較隨意的,但在實(shí)際開發(fā)中還是要靠一定的經(jīng)驗(yàn),不然開發(fā)出來的系統(tǒng)會(huì)出現(xiàn)很多問題。一般來說主碼都應(yīng)該選擇那些從不或者極少變化的屬性。
- 外碼:在關(guān)系K中的屬性或?qū)傩越M若在另一個(gè)關(guān)系J中作為主碼使用,則稱該屬性或?qū)傩越M為K的外碼。K的外碼和J中的主碼必須定義在相同的域上,允許使用不同的屬性名。
8. SELECT查詢語句中的通配符。
select * :*表示所有列
9. 視圖的定義與視圖的作用。
視圖(View)是從一個(gè)或者多個(gè)基本表(或視圖)中導(dǎo)出的表。它與基本表不同,是一個(gè)虛表。數(shù)據(jù)庫中只存放視圖的定義,不存放視圖對應(yīng)的數(shù)據(jù),這些數(shù)據(jù)仍存放在原來的基本表中。所以基本表中的數(shù)據(jù)發(fā)生變化,從視圖中查詢出的數(shù)據(jù)也隨之改變。從這個(gè)意義上講,視圖就像一個(gè)窗口,透過它可以看到數(shù)據(jù)庫中自己感興趣的數(shù)據(jù)及其變化。視圖一經(jīng)定義,就可以和基本表一樣被查詢,刪除。也可以在一個(gè)視圖之上再定義新的視圖,但對視圖的更新(增刪改)操作則有一定的限制。
對于視圖需要注意的點(diǎn):
(1)當(dāng)基礎(chǔ)關(guān)系發(fā)生變化后,再去訪問視圖,看到的虛擬關(guān)系也會(huì)發(fā)生相應(yīng)的變化
(2)用戶對視圖的查詢,系統(tǒng)在執(zhí)行時(shí)必須轉(zhuǎn)換為對基礎(chǔ)關(guān)系的查詢
(3)用戶對視圖的修改,系統(tǒng)在執(zhí)行時(shí)必須轉(zhuǎn)換為對基礎(chǔ)關(guān)系的修改
視圖的作用:
視圖定義在基本表之上,對視圖的一切操作最終也要轉(zhuǎn)換為對基本表的操作。
- 視圖能簡化用戶的操作
- 視圖使用戶能以多個(gè)角度看待同一數(shù)據(jù)
- 視圖對重構(gòu)數(shù)據(jù)庫提供了一定程度的邏輯獨(dú)立性
- 提高了數(shù)據(jù)的安全性
10. 索引的作用。如何建立索引。聚集索引、非聚集索引、唯一索引 的各自的特點(diǎn)。
用戶對數(shù)據(jù)庫最常用的操作之一就是查詢數(shù)據(jù)。在數(shù)據(jù)量比較大時(shí),搜索滿足條件的數(shù)據(jù)可能會(huì)花費(fèi)很長的時(shí)間,從而占用較多的服務(wù)器資源。為了提高數(shù)據(jù)檢索的能力,在數(shù)據(jù)庫中引入了索引的概念。數(shù)據(jù)庫中的索引類似于書籍中的目錄。在書籍中,利用目錄,用戶不必翻閱完整本書就能迅速地找到所需要的信息。在數(shù)據(jù)庫中,索引使得不需要對整個(gè)表進(jìn)行掃描,就可以在其中找到所需數(shù)據(jù)。
- 建立索引:
? CREATE [UNIQUE] [CLUSTERED] [NONCLUSTERED] INDEX <索引名>
? ON 表名 (<列名>[次序] [,<列名>[<次序>]]…)
- UNIQUE:表示要?jiǎng)?chuàng)建的索引是唯一索引。此索引的每一個(gè)索引值只對應(yīng)唯一的數(shù)據(jù)記錄。唯一索引可以只包含一個(gè)列(限制該列取值不重復(fù)),也可以由多個(gè)列共同構(gòu)成(限制這些列的組合取值不重復(fù))。只有當(dāng)數(shù)據(jù)本身具有唯一性特征時(shí),指定唯一索引才有意義。實(shí)際上,當(dāng)在表上創(chuàng)建PRIMARY KEY或UNIQUE約束時(shí),系統(tǒng)會(huì)自動(dòng)在這些列上創(chuàng)建唯一索引。
- CLUSTERED:表示要建立的索引是聚集索引。所謂聚集索引是指所有項(xiàng)的順序與表中記錄的物理順序一致
- NONCLUSTERED:表示要建立的索引是非聚集索引。非聚集索引與書后的術(shù)語表類似。書的內(nèi)容(數(shù)據(jù))存儲(chǔ)在一個(gè)地方,術(shù)語表(索引)存儲(chǔ)在另一個(gè)地方。而且書的內(nèi)容(數(shù)據(jù))并不按術(shù)語表(索引)的順序存放,但術(shù)語表中的每個(gè)詞在書中都有確定的位置。非聚集索引類似術(shù)語表,而數(shù)據(jù)就類似一本書的內(nèi)容。非聚集索引并不改變數(shù)據(jù)的物理存儲(chǔ)順序,因此,可以在一個(gè)表上建立多個(gè)非聚集索引。就像一本書可以有多個(gè)術(shù)語表意一樣,如一本介紹園藝的書可能會(huì)包含一個(gè)植物通俗名稱的術(shù)語表和一個(gè)植物學(xué)名稱的術(shù)語表,因?yàn)檫@是讀者查找信息的最常用的兩種方法。
注:如果沒有指定索引的類型,則默認(rèn)是創(chuàng)建非聚集索引。聚集索引和非聚集索引都可以是唯一索引。因此,只要列中的數(shù)據(jù)是唯一的,就可 以在同一個(gè)表上創(chuàng)建一個(gè)唯一的聚集索引和多個(gè)唯一的非聚集索引
11. 數(shù)據(jù)庫安全性的概念。SQL語言的GRANT和REVOKE語句。
? 數(shù)據(jù)庫的安全性是指保護(hù)數(shù)據(jù)庫以防止非法用戶訪問數(shù)據(jù)庫,避免造成數(shù)據(jù)泄露,更改或破壞。
? (1)數(shù)據(jù)庫遭到破壞
? (2)數(shù)據(jù)丟失
? (3)數(shù)據(jù)不一致
? (4)數(shù)據(jù)庫管理系統(tǒng)故障
GRANT語句:
GRANT <權(quán)限名>[,<權(quán)限名>] on <對象> to <用戶1>,<用戶2>,…| PUBLIC [WITH GRANT OPTION]
例:
GRANT SELECT,UPDATE ON STUDENT TO LIMING WITH GRANT OPTION;
GRANT SELECT(Sno,Sname),UPDATE(Sname) ON STUDENT TO U5;
GRANT SELECT ON SC TO PUBLIC;
GRANT CREATE TABLE,CREATE VIEW TO LIMING;
GRANT ALL ON STUDENT TO LIFANG;
REVOKE語句:
REVOKE <權(quán)限名>[,…] ON <對象> FROM <用戶1>,<用戶2>,… | PUBLIC
例:
REVOKE UPDATE ON STUDENT FROM LIMING;
REVOKE SELECT ON SC FROM PUBLIC;
REVOKE CREATE TABLE FROM LIMING;
12. 函數(shù)依賴、屬性集閉包、運(yùn)用屬性集閉包求超碼(候選碼)。判斷2NF、3NF。
13. 關(guān)系模式分解的原則:保持函數(shù)依賴,無損連接分解。
關(guān)系模式規(guī)范化的方法是進(jìn)行模式分解,但是分解后產(chǎn)生的模式應(yīng)與原模式等價(jià);即模式分解必須遵守一定的準(zhǔn)則,不能表面上消除了操作異常,卻留下其他問題。模式分解需要滿足以下標(biāo)準(zhǔn):
(1)模式分解具有無損連接性
(2)模式分解能夠保持函數(shù)依賴
無損連接是指分解后的關(guān)系與原關(guān)系相比,既不多出信息,也不丟失信息。保持函數(shù)依賴是指在模式分解的過程中函數(shù)依賴不能丟失的特性,即模式分解不能破壞原來的語義。為了得到更高范式的關(guān)系而進(jìn)行的模式分解是否能夠既保證無損鏈接又保持函數(shù)依賴呢?答案是否定的
對于無損連接分解就是不會(huì)丟失信息的分解,判定“一分二”是否無損鏈接的充分必要條件是,將關(guān)系R分解為R1和R2,則當(dāng)以下兩個(gè)函數(shù)依賴之一能夠成立時(shí),這種分解是無損的。
R1∩R2–>R1-R2
R1∩R2–>R2-R1
有關(guān)系模式R(C,T,H,R,S),函數(shù)依賴集為F={C–>T,HR–>C,HT–>R,HS–>R}。現(xiàn)在將R分解為兩個(gè)關(guān)系,R1(C,H,S)和R2(C,T,H,R),這一分解是無損的嗎?
解:是
R1∩R2=CH
R1-R2=S
R2-R1=TR
因?yàn)镃H+=(CHTR),即CH–>TR成立
可以發(fā)現(xiàn)R1∩R2–>R2-R1,所以R分解為R1,R2是無損的。
worker(name,branch,manager)分解為w1(name,branch),b1(branch,manager)
W1∩B1=branch
W1-B1=name
B1-W1=manager
branch+=manager
W1∩B1–>manager,所以是無損連接
14. 掌握規(guī)范到3NF的方法。
**第一范式1NF:**每個(gè)屬性都是原子的關(guān)系是第一范式,也就是說關(guān)系的每個(gè)屬性都是原子屬性(屬性值不可再分)。例如,年齡,性別是原子屬性;父母是非原子屬性。
必須將非1NF的關(guān)系變?yōu)?NF的關(guān)系,關(guān)鍵的方法是將表中每個(gè)非原子的屬性轉(zhuǎn)換成原子屬性。包含多值屬性的表規(guī)范成為第一范式的關(guān)系的處理步驟如下。
第一步:將多值屬性從原表中移出
第二步:生成一個(gè)新關(guān)系,這個(gè)新關(guān)系同時(shí)還包含原來的主碼,新關(guān)系的主碼是原關(guān)系的主碼與多值屬性的組合
包含復(fù)合屬性的表規(guī)范到第一范式的處理步驟比較簡單,只要將復(fù)合屬性轉(zhuǎn)換成相應(yīng)的多個(gè)原子屬性即可
第二范式2NF:
若關(guān)系模式R(U,F)∈1NF,并且每一個(gè)非主屬性都完全函數(shù)依賴于R的候選碼。則R(U,F)∈2NF
判斷是否屬于2NF的方法是:是否存在某個(gè)非主屬性,它部份依賴候選碼,或者說依賴候選碼的一部分,存在則不屬于2NF,不存在則屬于2NF。
例如所示關(guān)系S-C-G(Sno,Cno,Cname,Grade)就不是第二范式的關(guān)系。因?yàn)椋⊿no,Cno)是主鍵,在此關(guān)系中主屬性有(Sno,Cno),非主屬性有Cname,Grade。因?yàn)镃no->Cname,所有(Sno,Cno)P>Cname,這就是非主屬性部分依賴于候選碼。
這個(gè)關(guān)系模式S-C-G(Sno,Cno,Cname,Grade)不是一個(gè)好的關(guān)系,它存在著數(shù)據(jù)冗余,以及插入異常,刪除異常,修改異常
**第三范式3NF:**若關(guān)系模式R(U,F)∈1NF,并且每一個(gè)非主屬性都非傳遞依賴于候選碼,則R(U,F)∈3NF
判斷關(guān)系是否屬于3NF的方法是:是否存在某個(gè)非主屬性,它的傳遞函數(shù)依賴于候選碼,或者函數(shù)依賴于某個(gè)非主屬性,存在則不屬于3NF,不存在則屬于3NF。
例所示關(guān)系模式worker(name,branch,manager)就不是第三范式的關(guān)系。因?yàn)閚ame是主鍵,在此關(guān)系中主屬性有name,非主屬性有branch和manager。而name–>branch,branch–>manager,所以name–>(傳遞)manager,這就是非主屬性傳遞依賴于候選碼。關(guān)系模式worker(name,branch,manager)是第二范式的關(guān)系。因?yàn)樵撽P(guān)系的候選碼只有一個(gè)屬性,其他非主屬性對候選碼都是完全函數(shù)依賴
從上面例子可以看出,關(guān)系R∈2NF,但有可能不屬于3NF。達(dá)到3NF的要求比達(dá)到2NF高。
**BC范式:(BCNF)**期末考試一定不滿足這個(gè)范式
R∈BCNF,則R∈3NF(充分)
R∈3NF,則R不一定∈BCNF(不必要)
如果R∈3NF,且只有一個(gè)候選碼,則是充分必要條件
15. 事務(wù)的四個(gè)特性,事務(wù)并發(fā)執(zhí)行的三種數(shù)據(jù)不一致。
? 事務(wù)具有四個(gè)特性:原子性(Automicity)、一致性(Consistency)、隔離性(Isoation)、持久性(Durability),簡稱為ACID特性。
- 原子性:事務(wù)是數(shù)據(jù)庫的邏輯工作單位,事務(wù)中包含的所以操作(特指修改操作)要么全部做,要么全不做
- 一致性:事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。獨(dú)立執(zhí)行一個(gè)事務(wù)(無其他事務(wù)同時(shí)并發(fā)執(zhí)行)的結(jié)果必須保證數(shù)據(jù)一致性。即事務(wù)開始前,數(shù)據(jù)滿足一致性要求;事務(wù)結(jié)束后,數(shù)據(jù)雖然變化了,但仍然滿足一致性要求
- 隔離性:一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對其他并發(fā)的事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相干擾
- 持久性:任何事務(wù)一旦提交了,它對數(shù)據(jù)庫的影響就必須是永久性的。無論發(fā)生什么故障,都不能取消或破壞這種影響。
***考:***錯(cuò)誤的并發(fā)調(diào)度可能產(chǎn)生的三種錯(cuò)誤,又稱為三類數(shù)據(jù)不一致性:
- 丟失修改
- 不可重復(fù)讀
- 讀臟數(shù)據(jù)
16. 封鎖技術(shù)、讀鎖、寫鎖。
封鎖:多個(gè)事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與按某一次序串行地執(zhí)行這些事務(wù)時(shí)的結(jié)果相同,這種調(diào)度策略為可串行化的調(diào)度??纱谢遣l(fā)事務(wù)正確調(diào)度的原則。雖然以不同的順序執(zhí)行事務(wù)可能會(huì)產(chǎn)生不同的結(jié)果,但是不會(huì)將數(shù)據(jù)庫置于不一致的狀態(tài),因此都是正確的。
一個(gè)給定的并發(fā)調(diào)度,當(dāng)且僅當(dāng)它是可串行化的,才認(rèn)為是正確調(diào)度。并發(fā)控制的任務(wù)是:保證事務(wù)的并發(fā)調(diào)度是正確的(保證隔離性/可串行化—效果上等價(jià)于某個(gè)可串行調(diào)度),最后不會(huì)破壞數(shù)據(jù)一致性。
封鎖是實(shí)現(xiàn)并發(fā)控制的一個(gè)非常重要的技術(shù)。所謂封鎖就是事務(wù)T在對某個(gè)數(shù)據(jù)對象如表,記錄等操作之前,先向系統(tǒng)發(fā)出請求,對其加鎖。加鎖后事務(wù)T就對該數(shù)據(jù)對象有了一定的控制,在事務(wù)T釋放它的鎖之前,其他事務(wù)不能對此數(shù)據(jù)對象進(jìn)行某些操作。
封鎖的基本類型有兩種:排他鎖(Exclusive Locks,簡稱X鎖)和共享鎖(Share Locks,簡稱S鎖)
X鎖,又稱寫鎖,或排他鎖。一個(gè)事務(wù)對數(shù)據(jù)對象A進(jìn)行修改(寫)操作之前,給它加上X鎖,加上X鎖之后,其他任何事務(wù)都不能再對A加任何類型的鎖,直到X鎖被T釋放為止。
S鎖,又稱讀鎖,或共享鎖。一個(gè)事務(wù)對A進(jìn)行讀取操作之前,給它加上S鎖。加上S鎖后,其他事務(wù)可以對A進(jìn)行加更多的鎖。當(dāng)然,只能是另外一個(gè)S鎖,而不能是X鎖,直到S鎖被T釋放為止。
17. 一級封鎖協(xié)議、二級封鎖協(xié)議、三級封鎖協(xié)議、兩段鎖封鎖協(xié)議。每個(gè)協(xié)議何時(shí)加鎖,何時(shí)解鎖,各自解決哪些數(shù)據(jù)不一致。
事務(wù)對數(shù)據(jù)對象加鎖時(shí),還需遵循某些規(guī)則,包括是否(對讀寫操作)加鎖;何時(shí)加鎖,何時(shí)釋放。我們稱這些規(guī)則為封鎖協(xié)議。對封鎖方式規(guī)定不同的規(guī)則,就形成了不同級別的封鎖協(xié)議。不同級別的封鎖協(xié)議所能達(dá)到的系統(tǒng)一致性級別時(shí)不同的。
- 一級封鎖協(xié)議:一級封鎖協(xié)議的要求為若事務(wù)對數(shù)據(jù)對象A做的是修改操作時(shí),必須首先對其加X鎖(第一次READ/WRITE之前),且直到事務(wù)結(jié)束才能釋放X鎖(COMMIT或ROLLBACK后),若事務(wù)對A做的是讀取操作,則沒有任何要求(加鎖或不加鎖都可以)。因?yàn)閮蓚€(gè)事務(wù)無法分別修改同一個(gè)數(shù)據(jù),所有一級封鎖協(xié)議可解決丟失修改的問題
- 二級封鎖協(xié)議:再一級封鎖協(xié)議的基礎(chǔ)上,若事務(wù)對數(shù)據(jù)對象A做讀取操作,則讀操作(READ)前要求對其加S鎖,讀操作后可在任意時(shí)刻釋放S鎖。利用二級封鎖協(xié)議除了可以解決丟失修改外,還能解決讀臟數(shù)據(jù)的問題。因?yàn)闆]有事務(wù)能夠讀取其他事務(wù)正在修改,還未提交的數(shù)據(jù),所以利用二級封鎖協(xié)議可解決讀臟數(shù)據(jù)的問題
- 一級封鎖協(xié)議的基礎(chǔ)上,若事務(wù)對A做的是讀取操作,則要求首先對其加S鎖(第一次READ之前),且直到事務(wù)結(jié)束才能釋放S鎖(COMMIT或ROLLBACK后)。利用三級封鎖協(xié)議解決丟失修改,讀臟數(shù)據(jù),不可重復(fù)讀的問題。因?yàn)闆]有事務(wù)能夠修改其他事務(wù)正在讀取的數(shù)據(jù),所以三級封鎖協(xié)議可解決不可重復(fù)讀的問題。
封鎖協(xié)議 | X鎖(對寫數(shù)據(jù)) | S鎖(對只讀數(shù)據(jù)) | 不丟失修改(寫) | 不讀“臟”數(shù)據(jù)(讀) | 可重復(fù)讀(讀) |
---|---|---|---|---|---|
一級 | 事務(wù)全程加鎖 | 不用加鎖 | 是 | ||
二級 | 事務(wù)全程加鎖 | 讀前加鎖,讀完后即可釋放 | 是 | 是 | |
三級 | 事務(wù)全程加鎖 | 事務(wù)全程加鎖 | 是 | 是 | 是 |
- 兩段鎖協(xié)議:為了保證并發(fā)調(diào)度的正確性,DBMS的并發(fā)控制機(jī)制必須提供一定的手段來保證調(diào)度是可串行化的。目前DBMS普遍采用兩段鎖協(xié)議來實(shí)現(xiàn)并發(fā)調(diào)度的可串行化,從而保證調(diào)度的正確性。
? 兩段鎖協(xié)議是指所有事務(wù)必須分兩個(gè)階段對數(shù)據(jù)項(xiàng)加鎖和解鎖。兩段鎖協(xié)議要求,在對任何數(shù)據(jù)進(jìn)行讀寫之前,事務(wù)首先要獲得對該數(shù)據(jù)的S或X封鎖,釋放后不能再讀,寫該數(shù)據(jù)。在釋放第一個(gè)封鎖之后,事務(wù)不再獲得任何其他封鎖,即事務(wù)分為如下兩個(gè)階段。
? 事務(wù)過程 --開始------加鎖段-------段分界-------解鎖段------->
(1)生長階段:在這個(gè)階段事務(wù)獲得所有需要的鎖,并且不釋放任何封鎖
(2)收縮階段:在這個(gè)階段的事務(wù)釋放全部的鎖,并且也不能再獲得任何新鎖
若所有事務(wù)均遵從兩段鎖協(xié)議,則對這些事務(wù)的并發(fā)調(diào)度一定是可串行化的。反過來,在一個(gè)可串行化調(diào)度中,不一定所有事務(wù)都遵從兩段鎖協(xié)議。因此,所有事務(wù)都遵從兩段鎖協(xié)議是可 串行化調(diào)度的充分而不是必要條件。
可以證明,若并發(fā)執(zhí)行的所有事務(wù)都遵守兩段鎖協(xié)議,則這些事務(wù)的任何并發(fā)調(diào)度策略都是可串行化的。但若并發(fā)事務(wù)的某個(gè)調(diào)度是可串行化的,并不意味著這些事務(wù)都遵守兩段鎖協(xié)議。
可避免而不可杜絕死鎖。
18. 數(shù)據(jù)庫系統(tǒng)的故障種類。對每種故障舉例說明。
數(shù)據(jù)庫系統(tǒng)中可能發(fā)生各種各樣的故障,大致故障可以分為以下4類:
- 事務(wù)內(nèi)部故障:事務(wù)內(nèi)部的故障有的可以 通過事務(wù)程序本身發(fā)現(xiàn),有的是非預(yù)期的,不能由事務(wù)程序處理。例如銀行轉(zhuǎn)賬事務(wù),這個(gè)事務(wù)把一筆金額從賬戶A轉(zhuǎn)給賬戶B,賬戶A中的余額不足,則應(yīng)該不能進(jìn)行轉(zhuǎn)賬,否則可以進(jìn)行轉(zhuǎn)賬。這個(gè)對金額的判斷就可以在事務(wù)的程序代碼中進(jìn)行。如果發(fā)現(xiàn)不能轉(zhuǎn)賬的情況,對事務(wù)進(jìn)行回滾即可
- 系統(tǒng)故障:系統(tǒng)故障是指造成系統(tǒng)停止運(yùn)轉(zhuǎn)和重啟的故障。例如,硬件錯(cuò)誤(CPU故障)、操作系統(tǒng)故障,突然停電等。這樣的故障會(huì)影響正在允許的所有事務(wù),但不會(huì)破壞數(shù)據(jù)庫。
- 介質(zhì)故障:介質(zhì)故障是因?yàn)槟撤N原因,磁盤上的數(shù)據(jù)部分或則完全丟失。一般是指相關(guān)的人員破壞或者硬件故障。例如,錯(cuò)誤的格式化,磁盤壞道,機(jī)房失火等。這類故障比前兩類故障發(fā)生的可能性小很多,但是破壞性最大
- 計(jì)算機(jī)病毒:計(jì)算機(jī)病毒是一種人為的故障或破壞,是一些惡作劇者研制的一種計(jì)算機(jī)程序。這種程序與其他程序不同,它像微生物學(xué)所稱的病毒一樣可以繁殖和傳播,并造成對計(jì)算機(jī)系統(tǒng)包括數(shù)據(jù)庫的危害。
19. 事務(wù)日志的作用與內(nèi)容。登記日志的文件要遵守的原則。
建立冗余數(shù)據(jù)最常用的技術(shù)就是數(shù)據(jù)轉(zhuǎn)儲(chǔ)和登記日志文件。
(1)日志文件的格式與內(nèi)容
日志文件是用來記錄事務(wù)對數(shù)據(jù)庫的更新操作的文件。不同數(shù)據(jù)庫系統(tǒng)采用的日志文件格式完全不一樣。概況起來日志文件主要有兩種格式:以記錄為單位的日志文件和以數(shù)據(jù)塊為單位的日志文件
以記錄為單位的日志文件,登記到日志文件的內(nèi)容包括:
① 登記各個(gè)事務(wù)開始的日志記錄
② 登記各個(gè)事務(wù)結(jié)束的日志記錄
③ 登記各個(gè)事務(wù)中修改操作對象的日志記錄(每次修改對應(yīng)一條記錄)
(2)日志文件的作用
日志文件再數(shù)據(jù)庫恢復(fù)中起著非常重要的作用。可以用來進(jìn)行事務(wù)故障恢復(fù)和系統(tǒng)故障恢復(fù),并協(xié)助后備副本進(jìn)行介質(zhì)故障恢復(fù)。日志文件的具體作用是:事務(wù)故障恢復(fù)和系統(tǒng)故障恢復(fù)必須用日志文件。
(3)登記日志文件
為保證數(shù)據(jù)庫是可恢復(fù)的,登記日志文件必須遵循兩條原則:
① 登記的次序嚴(yán)格按并發(fā)事務(wù)執(zhí)行的時(shí)間次序;文章來源:http://www.zghlxwxcb.cn/news/detail-788224.html
② 必須先寫日志文件,后寫數(shù)據(jù)庫;文章來源地址http://www.zghlxwxcb.cn/news/detail-788224.html
到了這里,關(guān)于數(shù)據(jù)庫原理與應(yīng)用期末復(fù)習(xí)大綱的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!