一元云購(gòu)網(wǎng)站開發(fā)國(guó)家職業(yè)技能培訓(xùn)官網(wǎng)
數(shù)據(jù)庫(kù)系統(tǒng)
筆記
計(jì)科210X 甘晴void 202108010XXX
教材:《數(shù)據(jù)庫(kù)系統(tǒng)概論》第6版
(圖片來(lái)源于網(wǎng)絡(luò),侵刪)
文章目錄
- 數(shù)據(jù)庫(kù)系統(tǒng)<br>筆記
- 第一篇 基礎(chǔ)篇
- 1 緒論
- 1.1數(shù)據(jù)庫(kù)系統(tǒng)概述
- 1.2數(shù)據(jù)模型
- 1.3數(shù)據(jù)庫(kù)系統(tǒng)的結(jié)構(gòu)(三級(jí)模式結(jié)構(gòu))
- 1.4數(shù)據(jù)庫(kù)系統(tǒng)的組成
- 1.5總結(jié)
- 2 關(guān)系數(shù)據(jù)庫(kù)
- 2.1關(guān)系
- 2.1.1關(guān)系
- 2.1.2關(guān)系模式
- 2.2關(guān)系操作
- 2.2.1基本的關(guān)系操作
- 2.2.2關(guān)系數(shù)據(jù)語(yǔ)言的分類
- 2.3關(guān)系完整性
- ★2.4關(guān)系代數(shù)
- 2.4.1傳統(tǒng)的集合運(yùn)算
- 2.4.2專門的關(guān)系運(yùn)算
- 3 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言 SQL
- 3.1 SQL概述
- 3.2數(shù)據(jù)定義
- ★3.3數(shù)據(jù)查詢
- 3.4數(shù)據(jù)更新
- 3.5空值的處理
- 3.6視圖
- 4 數(shù)據(jù)庫(kù)安全性
- 自主存取控制
- 強(qiáng)制存取控制
- 視圖機(jī)制
- 審計(jì)
- 數(shù)據(jù)加密(略)
- 其他安全性保護(hù)
- 5 數(shù)據(jù)庫(kù)完整性
- 5.2 實(shí)體完整性
- 5.3 參照完整性
- 5.4 用戶定義的完整性
- 5.5 完整性約束命名子句
- 5.7 觸發(fā)器
- 【期中考試備考】
- 第二篇 設(shè)計(jì)與應(yīng)用開發(fā)篇
- ★6 關(guān)系數(shù)據(jù)理論
- 6.2 規(guī)范化
- ★6.3 數(shù)據(jù)依賴的公理系統(tǒng)
- 7 數(shù)據(jù)庫(kù)設(shè)計(jì)
- ★7.1 數(shù)據(jù)庫(kù)設(shè)計(jì)概述
- 7.2 需求分析
- 7.3 概念結(jié)構(gòu)設(shè)計(jì)
- 7.4 邏輯結(jié)構(gòu)設(shè)計(jì)
- 7.5 物理結(jié)構(gòu)設(shè)計(jì)
- 7.6 數(shù)據(jù)庫(kù)的實(shí)施和維護(hù)
- 【不考】8 數(shù)據(jù)庫(kù)編程
- 8.1 擴(kuò)展SQL功能
- 8.2 過(guò)程化SQL
- 8.3 JDBC編程
- 【不考】9 關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)管理
- 10 關(guān)系查詢處理和查詢優(yōu)化
- 10.1 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的查詢處理
- 10.2 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的查詢優(yōu)化
- 10.3 代數(shù)優(yōu)化
- 10.4 物理優(yōu)化
- ★本章重要簡(jiǎn)答題
- 11 數(shù)據(jù)庫(kù)恢復(fù)技術(shù)
- 11.1 事務(wù)的基本概念
- ★11.3 故障的種類
- 11.4 數(shù)據(jù)庫(kù)恢復(fù)的實(shí)現(xiàn)技術(shù)
- ★11.5 恢復(fù)策略
- ★11.6 具有檢查點(diǎn)的恢復(fù)技術(shù)
- 11.7 數(shù)據(jù)庫(kù)鏡像(了解)
- 12 并發(fā)控制
- 12.1 并發(fā)控制概述
- 12.2 事務(wù)的隔離級(jí)別
- 12.3 封鎖
- 12.4 封鎖協(xié)議
- 12.5 活鎖和死鎖
- 12.6 并發(fā)調(diào)度的可串行性
- 12.7 兩段鎖協(xié)議
- 12.8 封鎖的粒度
- 【期末考試復(fù)習(xí)】
第一篇 基礎(chǔ)篇
1 緒論
1.1數(shù)據(jù)庫(kù)系統(tǒng)概述
基本概念:
-
數(shù)據(jù):描述事物的符號(hào)記錄稱為數(shù)據(jù)。數(shù)據(jù)的含義稱為數(shù)據(jù)的語(yǔ)義,數(shù)據(jù)與其語(yǔ)義是不可分的。
-
數(shù)據(jù)庫(kù)(DB):長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi)、有組織的、可共享的大量數(shù)據(jù)的集合。數(shù)據(jù)庫(kù)中的數(shù)據(jù)按一定的數(shù)據(jù)模型組織、描述和存儲(chǔ),具有較小的冗余度、較高的數(shù)據(jù)獨(dú)立性和易擴(kuò)展性,并可為各種用戶共享。
-
數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS):數(shù)據(jù)庫(kù)管理軟件,計(jì)算機(jī)的基礎(chǔ)軟件
數(shù)據(jù)定義功能
數(shù)據(jù)組織、存儲(chǔ)和管理
數(shù)據(jù)操縱功能
數(shù)據(jù)庫(kù)的事務(wù)管理和運(yùn)行管理
數(shù)據(jù)庫(kù)的建立和維護(hù)功能
其他功能 -
數(shù)據(jù)庫(kù)系統(tǒng)(DBS):由DB,DBMS及其應(yīng)用開發(fā)工具,應(yīng)用系統(tǒng)和DBA組成的存儲(chǔ)、管理、處理和維護(hù)數(shù)據(jù)的系統(tǒng)
-
DBA數(shù)據(jù)庫(kù)管理員
數(shù)據(jù)庫(kù)管理技術(shù)的產(chǎn)生和發(fā)展:
人工管理階段 -> 文件系統(tǒng)階段 -> 數(shù)據(jù)庫(kù)系統(tǒng)階段
數(shù)據(jù)庫(kù)系統(tǒng)階段的4個(gè)優(yōu)點(diǎn)
- 整體數(shù)據(jù)的結(jié)構(gòu)化(與文件系統(tǒng)的本質(zhì)區(qū)別)
- 數(shù)據(jù)的共享性強(qiáng)、冗余度低且易于擴(kuò)充
- 數(shù)據(jù)的獨(dú)立性強(qiáng)(物理獨(dú)立性,邏輯獨(dú)立性)
- 數(shù)據(jù)由數(shù)據(jù)庫(kù)管理系統(tǒng)統(tǒng)一管理和控制
另外還需要提供的功能:
- 數(shù)據(jù)的安全性保護(hù):防止不合法使用造成的數(shù)據(jù)泄密和破壞。
- 數(shù)據(jù)的完整性檢查:控制數(shù)據(jù)的正確性,有效性和相容性。
- 并發(fā)控制
- 數(shù)據(jù)庫(kù)恢復(fù)
1.2數(shù)據(jù)模型
數(shù)據(jù)模型:數(shù)據(jù)庫(kù)系統(tǒng)的核心和基礎(chǔ)。
數(shù)據(jù)建模:把現(xiàn)實(shí)世界中的具體事物抽象、組織為某一數(shù)據(jù)庫(kù)管理系統(tǒng)支持的數(shù)據(jù)模型。
概念模型(現(xiàn)實(shí)世界抽象為信息世界) -> 數(shù)據(jù)模型(信息世界轉(zhuǎn)換為機(jī)器世界)
概念模型:
- 實(shí)體:客觀存在并可相互區(qū)別的實(shí)物稱為實(shí)體。
- 屬性:實(shí)體所具有的某一特性。
- 碼(key):唯一標(biāo)識(shí)實(shí)體的屬性集稱為碼。
- 實(shí)體型:用實(shí)體名和屬性名集合來(lái)抽象和刻畫同類實(shí)體。例如:學(xué)生(學(xué)號(hào),姓名,性別,院系)。
- 實(shí)體集:同一類型實(shí)體的集合稱為實(shí)體集。
- 聯(lián)系:實(shí)體之間的聯(lián)系通常是指不同實(shí)體集之間的聯(lián)系。有一對(duì)一,一對(duì)多和多對(duì)多等多種類型。
概念模型的表示方法:實(shí)體-聯(lián)系模型(E-R模型)
數(shù)據(jù)模型三要素:
- 數(shù)據(jù)結(jié)構(gòu):描述數(shù)據(jù)庫(kù)的組成對(duì)象以及對(duì)象之間的聯(lián)系。
- 數(shù)據(jù)操作:對(duì)數(shù)據(jù)庫(kù)中各種對(duì)象的實(shí)例允許執(zhí)行的操作的集合,包括操作及有關(guān)的操作規(guī)則。
- 完整性約束:一組完整性規(guī)則。
層次模型:
- 數(shù)據(jù)庫(kù)中滿足下面兩個(gè)條件的基本層次聯(lián)系的集合為層次模型:
- 有且只有一個(gè)結(jié)點(diǎn)沒有雙親結(jié)點(diǎn),稱為根結(jié)點(diǎn)。
- 根以外的其他結(jié)點(diǎn)只有一個(gè)雙親結(jié)點(diǎn)。
- 【注意:層次模型是一種一對(duì)多的聯(lián)系】
- 數(shù)據(jù)操縱主要為查詢,插入,刪除,更新。操作要滿足層次模型的完整性約束條件。
- 層次模型的優(yōu)點(diǎn):
- 數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單清晰。
- 查詢效率高(因?yàn)槁?lián)系用有向邊表示)。
- 提供了良好的完整性支持。
- 【未標(biāo)著重】層次模型的缺點(diǎn):
- 現(xiàn)實(shí)中很多聯(lián)系是非層次性的。
- 一個(gè)結(jié)點(diǎn)有多個(gè)雙親結(jié)點(diǎn),就只能引入冗余數(shù)據(jù),應(yīng)用程序編寫復(fù)雜。
- 查詢子女結(jié)點(diǎn)必須通過(guò)雙親結(jié)點(diǎn)。
- 結(jié)構(gòu)嚴(yán)密,層次命令趨于程序化。
網(wǎng)狀模型:
- 數(shù)據(jù)庫(kù)中滿足下面兩個(gè)條件的基本層次聯(lián)系的集合為網(wǎng)狀模型:
- 允許一個(gè)以上的結(jié)點(diǎn)無(wú)雙親。
- 一個(gè)結(jié)點(diǎn)可以有多于一個(gè)的雙親。
- 【注意:層次模型是一種多對(duì)多的聯(lián)系】
- 具體的網(wǎng)狀數(shù)據(jù)庫(kù)系統(tǒng)對(duì)數(shù)據(jù)操縱都加了一些限制,提供了一定的完整性約束。
- 網(wǎng)狀模型的優(yōu)點(diǎn):
- 能夠更為直接的描述現(xiàn)實(shí)世界。
- 具有良好的性能,存儲(chǔ)效率較高。
- 【未標(biāo)著重】網(wǎng)狀模型的缺點(diǎn):
- 結(jié)構(gòu)比較復(fù)雜,不利于最終用戶掌握。
- DDL,DML復(fù)雜,并且要嵌入一種高級(jí)語(yǔ)言中,不容易掌握和使用。
- 記錄之間的聯(lián)系通過(guò)存取路徑實(shí)現(xiàn),訪問數(shù)據(jù)時(shí)必須選擇適當(dāng)?shù)拇嫒÷窂?#xff0c;用戶必須了解系統(tǒng)結(jié)構(gòu)的細(xì)節(jié)。
關(guān)系模型:
- 關(guān)系模型要求關(guān)系必須是規(guī)范化的,關(guān)系的每一個(gè)分量必須是一個(gè)不可分的數(shù)據(jù)項(xiàng)。
- 關(guān)系模型的優(yōu)點(diǎn):
- 建立在嚴(yán)格的數(shù)學(xué)概念基礎(chǔ)上。
- 概念單一,
- 關(guān)系模型存取路徑對(duì)用戶隱蔽:有更高的數(shù)據(jù)獨(dú)立性,更好的安全保密性。(★因此查詢需優(yōu)化)
1.3數(shù)據(jù)庫(kù)系統(tǒng)的結(jié)構(gòu)(三級(jí)模式結(jié)構(gòu))
- 模式也稱邏輯模式,是數(shù)據(jù)庫(kù)中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述。數(shù)據(jù)庫(kù)管理系統(tǒng)提供模式數(shù)據(jù)定義語(yǔ)言(DDL)來(lái)嚴(yán)格定義模式。
- 模式反映的是數(shù)據(jù)結(jié)構(gòu)及其聯(lián)系,而實(shí)例反映的是數(shù)據(jù)庫(kù)某一時(shí)刻的狀態(tài)。
- 三級(jí)模式結(jié)構(gòu):
- 模式:是所有用戶的公共數(shù)據(jù)視圖。
- 外模式:數(shù)據(jù)庫(kù)用戶能夠看見和使用的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是數(shù)據(jù)庫(kù)用戶的數(shù)據(jù)視圖,是與某一應(yīng)用有關(guān)的數(shù)據(jù)的邏輯表示。
- 內(nèi)模式:數(shù)據(jù)物理結(jié)構(gòu)和存儲(chǔ)方式的描述,是數(shù)據(jù)在數(shù)據(jù)庫(kù)內(nèi)部的組織方式。
- 為了實(shí)現(xiàn)以上三個(gè)抽象層次的聯(lián)系和轉(zhuǎn)換,數(shù)據(jù)庫(kù)管理系統(tǒng)在三級(jí)模式之間提供了兩層映像:外模式/模式映像和模式/內(nèi)模式映像。
- 外模式/模式映像:定義了外模式與模式之間的對(duì)應(yīng)關(guān)系。
- 模式/內(nèi)模式映像:定義了數(shù)據(jù)全局邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)之間的關(guān)系。
- 數(shù)據(jù)庫(kù)模式即全局邏輯結(jié)構(gòu)是數(shù)據(jù)庫(kù)的中心與關(guān)鍵,獨(dú)立于數(shù)據(jù)庫(kù)的其他層次。(設(shè)計(jì)數(shù)據(jù)庫(kù)模式結(jié)構(gòu)時(shí)應(yīng)首先確定)
- 當(dāng)模式改變時(shí),修改映像使外模式不變,這保證了數(shù)據(jù)與程序的邏輯獨(dú)立性。
- 當(dāng)存儲(chǔ)結(jié)構(gòu)(內(nèi)模式)改變時(shí),修改映像使模式保持不變,這保證了數(shù)據(jù)與程序的物理獨(dú)立性。
1.4數(shù)據(jù)庫(kù)系統(tǒng)的組成
- 硬件平臺(tái)及數(shù)據(jù)庫(kù)
- 軟件
- 人員
人員包括
- 數(shù)據(jù)庫(kù)管理員:5個(gè)職責(zé)(書P32)
- 系統(tǒng)分析員和數(shù)據(jù)庫(kù)設(shè)計(jì)人員
- 應(yīng)用程序員:編程
- 最終用戶
1.5總結(jié)
4個(gè)基本概念
數(shù)據(jù)模型3要素
三級(jí)模式與兩級(jí)映射保證邏輯獨(dú)立性與物理獨(dú)立性
數(shù)據(jù)庫(kù)系統(tǒng)三級(jí)模式結(jié)構(gòu)的優(yōu)點(diǎn)
為什么具有數(shù)據(jù)和結(jié)構(gòu)的獨(dú)立性
2 關(guān)系數(shù)據(jù)庫(kù)
2.1關(guān)系
2.1.1關(guān)系
域:域
笛卡爾積:笛卡爾積(域的運(yùn)算)、元組、n元組、分量(元組中的每一個(gè)值)、基數(shù) (一個(gè)域允許的不同取值個(gè)數(shù))
關(guān)系:
-
關(guān)系(一些域的笛卡爾積的子集即為這些域的關(guān)系,抽取有意義的子集),記作R(……)、
-
關(guān)系的目/度n(運(yùn)算的笛卡爾積的個(gè)數(shù),即關(guān)系表的特征列個(gè)數(shù))、
-
屬性(n目關(guān)系必有n個(gè)屬性)、
三類關(guān)系
基本關(guān)系(基本表/基表)【實(shí)際存在】有6條性質(zhì)(列同質(zhì)、不同元組碼不能相同、不同列可出自同一域、列可換順序、行可換順序、分量取原子值,即不能表中有表)
查詢表【針對(duì)查詢結(jié)果的臨時(shí)表,實(shí)際存在】
視圖表【虛表】
2.1.2關(guān)系模式
R(A1,A2,A3,)
- 候選碼、主碼、全碼、主屬性、非主屬性(非碼屬性)
關(guān)系數(shù)據(jù)庫(kù):關(guān)系數(shù)據(jù)庫(kù)模式:關(guān)系數(shù)據(jù)庫(kù)的“型”
關(guān)系模型的存儲(chǔ)結(jié)構(gòu):RDBMS
2.2關(guān)系操作
2.2.1基本的關(guān)系操作
- 查詢操作
- 數(shù)據(jù)更新操作
2.2.2關(guān)系數(shù)據(jù)語(yǔ)言的分類
- 關(guān)系代數(shù)語(yǔ)言
- 關(guān)系演算語(yǔ)言(不要求)
- 結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language, SQL)
關(guān)系完備性:一個(gè)關(guān)系數(shù)據(jù)語(yǔ)言能夠表示關(guān)系代數(shù)可以表示的查詢
2.3關(guān)系完整性
包括
- 實(shí)體完整性(主屬性不取空值不得重復(fù))
- 參照完整性(注意外碼的定義:不是參照關(guān)系的碼但是被參照關(guān)系的主碼)(外碼可以取空值或被參考關(guān)系中已經(jīng)存在的值)
- 用戶定義的完整性(用戶可以自己定義:唯一約束、主鍵約束、自增長(zhǎng)約束、默認(rèn)值約束、檢查約束)
★2.4關(guān)系代數(shù)
2.4.1傳統(tǒng)的集合運(yùn)算
并、差、交、笛卡爾積
???#xff1a;R∩S=R-(R-S)
2.4.2專門的關(guān)系運(yùn)算
基礎(chǔ)記號(hào):
- 關(guān)系R、t∈R(t是關(guān)系R的一個(gè)元組)、t[Ai](元組t中相應(yīng)于屬性Ai的一個(gè)分量)
- t[A]=(t[Ai1],t[Ai2],t[Ai3],……,t[Aik])(元組t中相應(yīng)于屬性Ai的一個(gè)分量)
- 元組的連接/串接(就是把列連起來(lái))
- 象集(關(guān)系R(X,Z),對(duì)所有列ABCD……,以A=a,B=b(即X=x)這樣的條件篩選滿足的元組,篩選結(jié)果中非列AB的列屬性構(gòu)成的組合即為x在Z上的象集)
專門關(guān)系:
- 選擇(σ):(根據(jù)邏輯表達(dá)式來(lái)篩選有效元組)【注意比較運(yùn)算符的不等于是<>】
- 投影(Π):(只關(guān)注屬性列,篩選出某些屬性列并去除重復(fù)的元組)
- 連接(?):對(duì)兩個(gè)關(guān)系R、S,從笛卡爾積中抽取滿足條件的元組(特殊的連接:θ取“=”為等值連接、自然連接)
- 等值連接:抽取R中A列與S中B列相等的元組
- 自然連接:進(jìn)行比較的列必需是同名的屬性列,可能造成懸浮問題
- 懸浮元組、外連接、左外連接(只保留左邊關(guān)系的懸浮元組)、右外連接(只保留右邊關(guān)系的懸浮元組)
- 除運(yùn)算(÷):(除集合)對(duì)于公共屬性列的投影,(被除集合)中誰(shuí)的(象集)完全包含它,誰(shuí)就需要被納入結(jié)果。
- 【÷運(yùn)算可以用來(lái)做篩選:例如由SC表÷Course表可得到選修所有課程學(xué)生的名單】
經(jīng)過(guò)有限次復(fù)合得到的表達(dá)式稱為 關(guān)系代數(shù)表達(dá)式
如何使用五種基本運(yùn)算來(lái)表達(dá)專門關(guān)系?是一個(gè)重要的問題
3 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言 SQL
3.1 SQL概述
▲特點(diǎn)
- 功能綜合且風(fēng)格統(tǒng)一
- 數(shù)據(jù)操縱高度非過(guò)程化(只要提出做什么就可以)
- 面向集合的操作方式
- 以統(tǒng)一的語(yǔ)法結(jié)構(gòu)提供多種使用方式(獨(dú)立語(yǔ)言/嵌入式語(yǔ)言)
- 語(yǔ)言簡(jiǎn)潔且易學(xué)易用
3.2數(shù)據(jù)定義
模式的定義與刪除
#定義模式
create schema [模式名] authorization <用戶名>;
#刪除模式
drop schema <模式名><cascade|restrict> //級(jí)聯(lián)與限制必須二選一(CASADE會(huì)刪除所有,而若該模式內(nèi)有東西,RESTRICT會(huì)拒絕刪除)
基本表的定義、刪除與修改
#基本表的定義
create table <表名>(<列名><數(shù)據(jù)類型>[列級(jí)完整性約束]……[,<表級(jí)完整性約束>]);#一些表級(jí)完整性約束
PRIMARY KEY(Sno,Cno);
FOREIGN KEY(Sno) REFERENCES Student(Sno);列級(jí)完整性/表級(jí)完整性
#基本表的修改
ALTER TABLE <表名>[ADD [COLUMN] <新列名><數(shù)據(jù)類型>[完整性約束]][ADD <表級(jí)完整性約束>][DROP [column] <列名> [cascade|restrict]][DROP constraint <完整性約束名> [restrict|cascade]][RENAME COLUMN <列名> to <新列名>][ALTER COLUMN <列名> TYPE <數(shù)據(jù)類型>]#基本表的刪除
DROP TABLE <表名> [restrict|cascade] #▲注意區(qū)別,默認(rèn)RESTRICT
模式與基本表
#基本表屬于某一個(gè)特定的模式,下面是創(chuàng)建特定模式下基本表的方法。#可以在指定模式下創(chuàng)建基本表
CREATE TABLE "SC-C-SC".Student(……)#可以設(shè)定模式然后創(chuàng)建基本表
SHOW SEARCH_PATH;#可以查看當(dāng)前搜索路徑
SET SEARCH_PATH TO "SC-C-SC",PUBLIC;#設(shè)置當(dāng)前模式
#之后再創(chuàng)建基本表
課本示例
#課本示例
/*建立一個(gè)學(xué)生表*/
CREATE TABLE Student(Sno CHAR(9)PRIMARY KEY,Sname CHAR(20)UNIQUE,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20)
);
/*建立一個(gè)課程表*/
CREATE TABLE Course(Cno CHAR(4) PRIMARY KEY,Cname CHAR(40) NOT NULL,Cpno CHAR(4),Ccredit SMALLINT,/*表級(jí)完整性約束條件*/FOREIGN KEY (Cpno) REFERENCES Course(Cno)
);
/*建立學(xué)生選課表SC*/
CREATE TABLE SC(Sno CHAR(9),Cno CHAR(4),Grade SMALLINT,PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno) REFERENCES Student(Sno),FOREIGN KEY(Cno) REFERENCES Cource(Cno)
);
數(shù)據(jù)類型
P75
索引的建立與刪除
建立索引:加快查詢速度
索引是關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的內(nèi)部實(shí)現(xiàn)技術(shù),屬于內(nèi)模式的范疇。
#索引的建立
CREATE [unique][cluster]index <索引名>
on <表名>(<列名>[<次序>],……)
#索引的修改
ALTER index <舊索引名> rename to <新索引名>
#索引的刪除
DROP index <索引名>#e.g.
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Cousno ON Cource(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
數(shù)據(jù)字典(記錄數(shù)據(jù)定義)
★3.3數(shù)據(jù)查詢
SELECT [all|distinct]<目標(biāo)列表達(dá)式>[別名][,<目標(biāo)列表達(dá)式>[別名]]……
FROM <>
[WHERE<條件表達(dá)式>]
[GROUP BY <某個(gè)列名> [having <條件表達(dá)式>]]
[ORDER BY <某個(gè)列名> [asc|desc]]
[limit <行數(shù)1>[offset <行數(shù)2>]]
3.3.1單表查詢
#選擇表中的若干列(投影操作)
SELECT Sno FROM Student;#選擇表中的若干組(選擇操作)
SELECT DISTINCT Sno FROM Student;
#比較大小
WHERE = > < <> != !> !<
#確定范圍
SELECT Sno FROM Student WHERE Sage BETWEEN 20 AND 21;
SELECT Sno FROM Student WHERE Sage NOT BETWEEN 20 AND 21;
#確定集合
IN | NOT IN
#字符匹配
% #任意長(zhǎng)度字符串
_ #任意單個(gè)字符
WHERE Sname LIKE '__寅';
WHERE Sname NOT LIKE '%寅';
#涉及到含有通配符,可以后跟ESCAPE'\'進(jìn)行轉(zhuǎn)義
#WHERE Sname NOT LIKE '%寅\_' ESCAPE '\';
#涉及空值的查詢
WHERE GRADE IS NULL
WHERE GRADE IS NOT NULL
#多重條件查詢
AND OR 括號(hào)#ORDER BY子句
ORDER BY grade DESC | ASC #(排序操作)允許第二關(guān)鍵字
#查詢結(jié)果排序,不影響原表#聚集函數(shù)(數(shù)理統(tǒng)計(jì))
#不能用作WHERE子句條件表達(dá)式
#只能作為SELECT子句和GROUP BY子句的HAVING短語(yǔ)
COUNT(*)
COUNT([ DISTINCT | ALL ]<列名>)
支持 sum avg max min
#e.g.
SELECT COUNT(DISTINCT Sno) From SC;#GROUP BY子句(分組篩選)★★★
GROUP BY
SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) > 10;#Limit子句(只選擇前多少個(gè)子句,常與ORDER BY連用)
LIMIT 10 OFFSET 5 #顯示10個(gè)忽略前5個(gè)
3.3.2連接查詢
# 自然連接查詢 復(fù)合條件連接查詢
SELECT student.sno,sname
FROM student,sc
WHERE student.sno=sc.sno ANDsc.cno='2' AND sc.grade>90;
# 自身連接,需要為表起別名
#e.g. 間接先修課(先修課的先修課)
SELECT first.cno,seconde.cpno
FROM course first,course second
WHERE first.cpno=second.cno;
# 外連接,把表中的懸浮元組保存在結(jié)果關(guān)系中
SELECT student.sno,sname,ssex,sage,sdept,cno,grade
FROM student LEFT OUTER JOIN sc ON (student.sno=sc.sno);
# 多表連接和以上類似
3.3.3嵌套查詢
查詢塊:一個(gè)select-from-where
嵌套查詢,外層查詢(父查詢),內(nèi)層查詢(子查詢)
【子查詢不能用order by】
any,all,
exist謂詞:只返回邏輯真假
存在量詞與全稱量詞
# 不相關(guān)子查詢
SELECT name
FROM student
WHERE dept IN(SELECT dept FROM studentWHERE name='劉晨');
# 相關(guān)子查詢
SELECT sno,cno
FROM SC x
WHERE Grade >= (SELECT AVG(Grade)FROM SC yWHERE y.sno=x.sno);
# ANY(SOME)/ALL
SELECT name,age
FROM student
WHERE age<ALL(SELECT ageFROM studentWHERE dept='CS')AND dept!='CS';
# EXIST
SELECT name
FROM student
WHERE EXISTS(SELECT *FROM SCWHERE sno=student.sno AND cno='1');
★全稱量詞的轉(zhuǎn)換
看書
★邏輯蘊(yùn)含的轉(zhuǎn)換
看書和作業(yè)例題
3.3.4集合查詢(了解即可)
# UNION
SELECT *
FROM student
WHERE dept='CS'
UNION (UNION ALL)
SELECT *
FROM student
WHERE age<=19;# INTERSECT
SELECT *
FROM student
WHERE dept='CS'
INTERSECT
SELECT *
FROM student
WHERE age<=19;# EXCEPT
SELECT *
FROM student
WHERE dept='CS'
EXCEPT
SELECT *
FROM student
WHERE age<=19;
3.3.5基于派生表的查詢
SELECT Sno,Cno
FROM SC,(SELECT Sno,Avg(Grade) FROM SC GROUP BY Sno)AS Avg_SC(Avg_sno,Avg_grade)
WHERE SC.Sno = Avg_SC.Avg_sno AND SC.Grade >= Avg_SC.Avg_grade;
3.4數(shù)據(jù)更新
3.4.1插入數(shù)據(jù)
插入一個(gè)元組
INSERT INTO <表名> [(<屬性列1>,<屬性列2>,……)] #如果與原表一致則可以省略
VALUES (<常量1>,<常量2>,……);插入子查詢結(jié)果
insert into <表名> [(<屬性列1>,<屬性列2>,……)]
子查詢;#e.g.
# 插入元組
INSERT INTO student(sno,sname,ssex,sdept,sage) #可以不指出屬性名,但VALUE要保持順序
VALUES('201215128','陳東','男','IS',18); #未給出的列將自動(dòng)賦空值
# 插入子查詢結(jié)果
CREATE TABLE DEPT_AGE(SDEPT CHAR(15)AVG_AGE SMALLINT);
INSERT DEPT_AGE(SDEPT,AVG_AGE)
SELECT SDEPT,AVG(SAGE)
FROM STUDENT
GROUP BY SDEPT;
3.4.2修改數(shù)據(jù)
update <表名>
set <列名>=<表達(dá)式>,<列名>=<表達(dá)式>……
[where <條件>];# 修改一個(gè)元組的值
UPDATE student
SET sage=22
WHERE sno='201215121';
# 修改多個(gè)元組的值
UPDATE student
SET sage=sage+1;
# 帶子查詢的修改語(yǔ)句
UPDATE SC
SET grade=0
WHERE sno IN(SELECT snoFROM studentWHERE sdept='CS');
3.4.3刪除數(shù)據(jù)
delete from <表名>
[where <條件>];
3.5空值的處理
空值與另一個(gè)值的算數(shù)運(yùn)算結(jié)果為空值
空值與另一個(gè)值的比較運(yùn)算結(jié)果為UNKNOWN,不參與/影響是非判定
3.6視圖
CREATE VIEW <視圖名>[(<列名1>,<列名2>,……)]
as <子查詢> #子查詢可以嵌套,此時(shí)稱建立在多個(gè)基本表上
[with check option]; #加上該句之后插入值時(shí)會(huì)自動(dòng)檢查是否符合子查詢的要求,若不滿足則拒絕
DROP VIEW <視圖名> [CASCADE]UPDATE SET WHERE
INSERT INTO VALUES
DELETE FROM WHERE
- 執(zhí)行CREATE VIEW 語(yǔ)句時(shí)指示把視圖的定義存入數(shù)據(jù)字典,不執(zhí)行SELECT語(yǔ)句,只有在對(duì)視圖查詢時(shí),才按視圖的定義從基本表中將數(shù)據(jù)查出。
- 行列子集視圖:從單個(gè)基本表導(dǎo)出,并且只是丟掉了某些行或列,但保留了主碼。(一般是可更新的)
- 帶表達(dá)式的視圖:帶虛擬列的視圖。
- 視圖消解:首先進(jìn)行有效性檢查,檢查查詢中涉及的視圖等是否存在。若存在,則從數(shù)據(jù)字典中取出視圖的定義,把定義中的子查詢和用戶的子查詢結(jié)合起來(lái),轉(zhuǎn)換成等價(jià)的對(duì)基本表的查詢,然后再執(zhí)行修正了的查詢
★視圖的作用:
- 視圖能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)
- 視圖對(duì)重構(gòu)數(shù)據(jù)庫(kù)提供了一定程度的邏輯獨(dú)立性
- 視圖能夠簡(jiǎn)化用戶操作
- 視圖使用戶能以多種角度看待同一數(shù)據(jù)
4 數(shù)據(jù)庫(kù)安全性
數(shù)據(jù)庫(kù)安全性是指保護(hù)數(shù)據(jù)庫(kù),以防不合法使用所造成的數(shù)巨泄露、篡改或破壞。
★數(shù)據(jù)庫(kù)的安全性保護(hù)數(shù)據(jù)防止惡意的破壞和非法的存取
不安全因素:
- 非授權(quán)用戶對(duì)數(shù)據(jù)庫(kù)的惡意存取和破壞
- 重要或敏感的數(shù)據(jù)被泄露
- 安全環(huán)境的脆弱性
安全標(biāo)準(zhǔn):TCSEC:A1,B3,B2,B1,C2,C1,D
CC
用戶身份鑒別:靜態(tài)口令鑒別,動(dòng)態(tài)口令鑒別,生物特征鑒別,智能卡鑒別,入侵檢測(cè)
存取控制:自主存取控制DAC(C2級(jí)),強(qiáng)制存取控制MAC(B1級(jí))
自主存取控制
自主存取控制的缺點(diǎn)是可能存在數(shù)據(jù)無(wú)意識(shí)的泄露。因?yàn)閿?shù)據(jù)本身并無(wú)安全性標(biāo)記。
授權(quán)(grant)
GRANT <權(quán)限1>,<權(quán)限2>…… #全部,用all priviliges
ON <對(duì)象類型><對(duì)象名>,<對(duì)象類型2><對(duì)象名2>……
TO <用戶1>,<用戶2>…… #全部,用public
[with grant option] #是否允許授權(quán)傳播
#注意不得循環(huán)授權(quán)
收回(revoke)
revoke <權(quán)限1>,<權(quán)限2>……
on <對(duì)象類型><對(duì)象名>,<對(duì)象類型2><對(duì)象名2>……
from <用戶1>,<用戶2>……[cascade | restrict]
創(chuàng)建數(shù)據(jù)庫(kù)權(quán)限
create user <username> [with] [superuser | createdb] | password 'password';
數(shù)據(jù)庫(kù)角色
create role <角色名> #創(chuàng)建角色
grant <權(quán)限> on <對(duì)象類型><對(duì)象名> to <角色> #角色授權(quán)
grant <角色> to <角色/用戶> [with admin option] #角色授予其他角色/用戶,with admin option是否允許傳播
revoke <權(quán)限> on <對(duì)象類型><對(duì)象名> from <角色> #角色授權(quán)收回
強(qiáng)制存取控制
強(qiáng)制存取控制是對(duì)數(shù)據(jù)本身進(jìn)行密級(jí)標(biāo)記,無(wú)論數(shù)據(jù)如何復(fù)制,標(biāo)記與數(shù)據(jù)是一個(gè)不可分的整體。
同時(shí)檢查DAC和MAC
每個(gè)數(shù)據(jù)庫(kù)對(duì)象被標(biāo)以一定的密級(jí),每一個(gè)用戶被授予某一個(gè)級(jí)別的許可證。對(duì)于任意一個(gè)對(duì)象,只有具有合法許可證的用戶才可以存取。主體對(duì)客體的存取必須遵循以下規(guī)則:
- 主體許可證級(jí)別大于或等于客體密級(jí)時(shí),才能讀取客體
- 主體許可證級(jí)別小于或等于客體密級(jí)時(shí),才能寫客體
第二條是為了防止高許可證級(jí)別的主體惡意降低高密級(jí)客體導(dǎo)致數(shù)據(jù)泄露。
視圖機(jī)制
與授權(quán)機(jī)制結(jié)合
審計(jì)
審計(jì)功能把用戶對(duì)數(shù)據(jù)庫(kù)的所有操作記錄下來(lái)放入審計(jì)日志。
審計(jì)員可以通過(guò)審計(jì)日志監(jiān)控?cái)?shù)據(jù)庫(kù)行為,找到非法存取數(shù)據(jù)的人,時(shí)間和內(nèi)容等。審計(jì)機(jī)制提供了一種事后安全檢查的機(jī)制。
DDL,DML,DCL分別是什么
show audit_trail
set audit_trail to on
audit alert,update on xxx by access #對(duì)xxx進(jìn)行審計(jì)
noaudit alert,update on xxx #取消對(duì)xxx進(jìn)行審計(jì)
數(shù)據(jù)加密(略)
存儲(chǔ)加密,傳輸加密
其他安全性保護(hù)
推理控制,隱蔽信道,數(shù)據(jù)隱私,“三權(quán)分立”的安全管理機(jī)制
5 數(shù)據(jù)庫(kù)完整性
★數(shù)據(jù)庫(kù)的完整性防范對(duì)象:不合語(yǔ)義、不正確的數(shù)據(jù),防止它們進(jìn)入數(shù)據(jù)庫(kù)。
數(shù)據(jù)庫(kù)數(shù)據(jù)的正確性和相容性
據(jù)庫(kù)管理系統(tǒng)必須能夠?qū)崿F(xiàn)以下功能:
- 提供定義完整性約束的機(jī)制
- 提供檢查完整性約束的方法
- 提供完整性的違約處理辦法
5.2 實(shí)體完整性
PRIMARY KEY 主碼
檢查主碼值是否唯一,檢查主碼的各個(gè)屬性是否為空,否則拒絕修改
5.3 參照完整性
FOREIGN KEY 外碼
對(duì)被參照表和參照表進(jìn)行修改時(shí)可能出現(xiàn)問題
違約處理策略:(一般采用默認(rèn),如果需要其他,則在創(chuàng)建參照表時(shí)顯式說(shuō)明)
- 拒絕執(zhí)行(默認(rèn))
- 級(jí)聯(lián)操作
- 設(shè)置為空值
5.4 用戶定義的完整性
屬性上的約束(不滿足拒絕執(zhí)行)
- 列值非空(NOT NULL)
- 列值唯一(UNIQUE)
- 檢查列值是否滿足一個(gè)條件表達(dá)式(CHECK短語(yǔ))
元組上的約束
違約處理:拒絕執(zhí)行
注意如何使用CHECK子句
5.5 完整性約束命名子句
完整性約束命名子句
CONSTRAINT <完整性約束名> <完整性約束>
包括NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK等子句
修改表中的完整性限制
ALTER TABLE xxxxxDROP CONSTRAINT C1ADD CONSTRAINT C2 NOT NULL
5.7 觸發(fā)器
事件-條件-動(dòng)作規(guī)則(ECArule)
類似約束,自動(dòng)激活,功能更強(qiáng)
定義觸發(fā)器
CREATE TRIGGER <觸發(fā)器名>
{BEFORE|AFTER} <觸發(fā)事件> ON <表名> #觸發(fā)事件為INSERT,DELETE,UPDATE以及它們的and,or以及類似UPDATE <觸發(fā)列,……>具體指明操作列
REFERENCING NEW|OLD AS <變量>
FOR EACH {ROW|STATEMENT}
[WHEN<觸發(fā)條件>]
<觸發(fā)動(dòng)作體>
教材舉例:
# 將INSERT語(yǔ)句增加的元組數(shù)記錄到insertlog中
CREATE TRIGGER Student_Count
AFTER INSERT ON Student
REFERENCINGNEW TABLE AS DELTA
FOR EACH STATEMENTINSERT INTO StudentInsertLog(Numbers)SELECT COUNT(*) FROM DELTA;
# 將分?jǐn)?shù)增加10%的操作添加到一個(gè)另一個(gè)表SC_U
CREATE TRIGGER SC_T
AFTER UPDATE ON SC
REFERENCINGOLDROW AS OldTupleNEWROW AS NewTuple
FOR EACH ROW
WHEN (NewTuple.Grade>=1.1*OldTuple.Grade)INSERT INTO SC_U (Sno,Cno,OldGrade,NewGrade)VALUES(OldTuple.Sno,OldTuple.Cno,ldTuple.Grade,NewTuple.Grade);
# 教授的工資不低于4000,低于4000則改為4000
CREATE TRIGGER Insert_Or_Update_Sal
BEFORE INSERT OR UPDATE ON Teacher
REFERENCING NEW row AS newtuple
FOR EACH ROW
BEGINIF(newtuple.Job=‘教授’) AND newtuple.Sal<4000)THEN newtuple.Sal:=4000;END IF;
END;
執(zhí)行觸發(fā)器(順序)
- BEFORE觸發(fā)器
- 激活該觸發(fā)器的SQL語(yǔ)句
- AFTER觸發(fā)器
刪除觸發(fā)器
DROP TRIGGER <觸發(fā)器名> ON <表名>
【期中考試備考】
事務(wù)的四個(gè)特性:持久性,一致性,原子性,隔離性
SQL語(yǔ)言具有的功能:數(shù)據(jù)定義,數(shù)據(jù)操縱,數(shù)據(jù)控制
DML數(shù)據(jù)操縱語(yǔ)言,DBL數(shù)據(jù)定義語(yǔ)言
第二篇 設(shè)計(jì)與應(yīng)用開發(fā)篇
★6 關(guān)系數(shù)據(jù)理論
6.2 規(guī)范化
函數(shù)依賴:
-
X函數(shù)確定Y 或 Y函數(shù)依賴于X 記作 X→Y
-
非平凡的函數(shù)依賴/平凡的函數(shù)依賴(X→Y但Y?X,則是平凡的)
-
完全函數(shù)依賴/部分函數(shù)依賴(X推出Y時(shí)X中的各部分是否缺一不可,若X的一部分就可以推出Y,則是部分函數(shù)依賴)
-
直接函數(shù)依賴/傳遞函數(shù)依賴(X→Y,Y不是平凡的,Y不能→X,Y→Z,Z不是平凡的,則X→Z有傳遞函數(shù)依賴)
(★不考)多值依賴:
- 對(duì)于關(guān)系R(U,F),X+Y+Z=U,若存在(x,y1,z1),(x,y2,z2)時(shí),(x,y1,z2),(x,y2,z1)也同時(shí)存在,則多值函數(shù)依賴X→→Y。
- 理解:x確定時(shí),y1到z的所有映射,y2都需要有。
- 若Z=空集,則X→→Y為平凡的多值依賴
碼/鍵:
- 候選碼:K-(F)->U,(U完全函數(shù)依賴于K),則K為R的候選碼。
- 主碼:若候選碼多于一個(gè),可以指定一個(gè)為主碼。
- 全碼:主碼就是全部屬性時(shí)。
- 超碼:K-(P)->U,(U部分函數(shù)依賴于U),則K為超碼。
- 外碼:R中屬性組X不是R的碼,但X是另一個(gè)關(guān)系模式的碼,X是R的外碼。
- 候選碼的超集(若存在)一定是超碼,候選碼的任何真子集一定不是超碼
范式
★不同等級(jí)的范式
-
1NF(屬性值都是不可分的原子值)
-
2NF(每一個(gè)非主屬性完全函數(shù)依賴于任何一個(gè)候選碼)
-
3NF(在1NF基礎(chǔ)上,R不存在碼X屬性組Y非主屬性Z且Z不是Y的子集,X→Y,Y→Z,Y不能→X)【每一個(gè)非主屬性不傳遞依賴于碼,不部分依賴于碼】
-
BCNF(在1NF基礎(chǔ)上,X→Y且Y不是X子集,X必含有碼,即每一個(gè)決定因素必含有碼)【不存在任何屬性對(duì)候選碼的傳遞函數(shù)依賴】在3NF基礎(chǔ)上消除了主屬性對(duì)碼的部分函數(shù)依賴
-
(不考)4NF(在1NF基礎(chǔ)上,對(duì)于R的每個(gè)非平凡多值依賴X→→Y且Y不是X的子集,X都含有碼)
(應(yīng)試)掌握到3NF與BCNF即可,考題問是否能達(dá)到3NF
★6.3 數(shù)據(jù)依賴的公理系統(tǒng)
Armstrong公理系統(tǒng)
- A1 自反律:若Y?X?U,則F邏輯蘊(yùn)涵X→Y
- A2 增廣律:若F邏輯蘊(yùn)涵X→Y,Z?U,則F邏輯蘊(yùn)涵XZ→YZ
- A3 傳遞律:若F邏輯蘊(yùn)涵X→Y,Y→Z,則F邏輯蘊(yùn)涵X→Z
根據(jù)A1,A2,A3可得以下推理規(guī)則
- 合并規(guī)則:若X→Y,X→Z,則X→YZ
- 分解規(guī)則:若X→Y,Z?Y,則X→Z
- 偽傳遞規(guī)則:若X→Y,WY→Z,則WX→Z
引理:X→A1A2A3A4……Ak <<<充分必要>>> X→Ai成立(1<i<n)
Armstrong公理系統(tǒng)的有效性&完備性
- 有效性:由F出發(fā),根據(jù)系統(tǒng)推導(dǎo)出來(lái)的每一個(gè)函數(shù)依賴一定在F+中
- 完備性:F+中的每一個(gè)函數(shù)依賴,必定可以由F觸發(fā)根據(jù)系統(tǒng)推導(dǎo)出來(lái)
函數(shù)依賴集的閉包:
- F為U上一組函數(shù)依賴,X?U,X在F上的閉包={A | X→A能由F根據(jù)Armstrong公理系統(tǒng)推導(dǎo)出}
- 引理6.2:X,Y?U,X→Y能由F根據(jù)Armstrong公理系統(tǒng)推導(dǎo)出 <<<充分必要>>> Y?X在F上的閉包
函數(shù)依賴集的等價(jià)
- 引理6.3 【F的閉包=G的閉包】 <<<充要條件>>> 【F的閉包?G的閉包】 && 【G的閉包?F的閉包】
- 判斷是否【F?G的閉包】成立:逐一對(duì)F中的函數(shù)依賴X→Y,判斷Y?(G+在X中的閉包)是否成立即可。
★★★大題考察:
【書P187-189】
- 求某個(gè)屬性組X在F上的閉包(【做法】由X和組成X的元素去做擴(kuò)散,看能推出哪些元素,自己自然是可以推出自己的)
- 判斷該屬性組X是否為候選碼(閉包為全部屬性的集合)(【做法】如果推出的元素就是全集,那這就是候選碼)
- (書上沒有)求解關(guān)系的候選碼(【思路】分為四類,L,R,LR,N,分別是只在左邊出現(xiàn),只在右邊出現(xiàn),左右都出現(xiàn),左右都不出現(xiàn),L和N必定是候選碼中的屬性,R必定不是,LR可能是)
- 判斷兩個(gè)函數(shù)依賴集是否等價(jià)(【做法】假設(shè)對(duì)F和G判定,對(duì)F中所有的X→Y都做X在G中的閉包,看看Y是不是被包含,然后同理可得G中也是,就能證明是不是等價(jià)的)
- 計(jì)算最小依賴集/最小覆蓋(【思路】①將右邊拆成單個(gè)屬性②試圖將左邊拆成單個(gè)屬性:若AB→C,若C∈A在F中的閉包,則B冗余(剝奪B,不影響,B多余)③試圖刪除某個(gè)關(guān)系:若 A→B,若B∈A在{F刪去A→B}的閉包,則該關(guān)系冗余(剝奪該關(guān)系,該關(guān)系的左值仍能推出右值,該關(guān)系冗余))
- 【具體做法】【圖片】
- 檢驗(yàn)F是否為最小依賴集(計(jì)算出來(lái)是自己)
7 數(shù)據(jù)庫(kù)設(shè)計(jì)
★7.1 數(shù)據(jù)庫(kù)設(shè)計(jì)概述
數(shù)據(jù)庫(kù)一般設(shè)計(jì)過(guò)程
- 需求分析階段:準(zhǔn)確了解與分析用戶需求(包括數(shù)據(jù)與處理),需求分析如果不好可能會(huì)導(dǎo)致整個(gè)數(shù)據(jù)庫(kù)重做。
- 概念結(jié)構(gòu)設(shè)計(jì)階段:通過(guò)對(duì)用戶需求進(jìn)行綜合、歸納與抽象,形成一個(gè)獨(dú)立于具體數(shù)據(jù)庫(kù)管理系統(tǒng)的概念模型。
- 邏輯結(jié)構(gòu)設(shè)計(jì)階段:將概念結(jié)構(gòu)轉(zhuǎn)換為某個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)所支持的數(shù)據(jù)模型,并對(duì)其進(jìn)行優(yōu)化。
- 物理結(jié)構(gòu)設(shè)計(jì)階段:為邏輯數(shù)據(jù)模型選取一個(gè)最適合應(yīng)用環(huán)境的物理結(jié)構(gòu)(包括存儲(chǔ)結(jié)構(gòu)和存取方法)。
- 數(shù)據(jù)庫(kù)實(shí)施階段:設(shè)計(jì)人員運(yùn)用數(shù)據(jù)庫(kù)管理系統(tǒng)提供的數(shù)據(jù)語(yǔ)言、工具及宿主語(yǔ)言,根據(jù)邏輯設(shè)計(jì)和物理設(shè)計(jì)的結(jié)果建立數(shù)據(jù)庫(kù),編制與調(diào)試應(yīng)用程序,組織數(shù)據(jù)入庫(kù),并進(jìn)行試運(yùn)行。
- 數(shù)據(jù)庫(kù)運(yùn)行和維護(hù)階段:在數(shù)據(jù)庫(kù)系統(tǒng)運(yùn)行過(guò)程中對(duì)其進(jìn)行評(píng)價(jià)、調(diào)整與修改。
7.2 需求分析
數(shù)據(jù)字典,包括下列5項(xiàng)
-
數(shù)據(jù)項(xiàng):不可再分的數(shù)據(jù)單位
-
數(shù)據(jù)結(jié)構(gòu):反映數(shù)據(jù)項(xiàng)之間的組合關(guān)系。數(shù)據(jù)結(jié)構(gòu)可由數(shù)據(jù)項(xiàng)/數(shù)據(jù)結(jié)構(gòu)混合組成。
-
數(shù)據(jù)流:數(shù)據(jù)結(jié)構(gòu)在系統(tǒng)內(nèi)傳輸?shù)穆窂?/p>
-
數(shù)據(jù)存儲(chǔ):數(shù)據(jù)結(jié)構(gòu)停留或保存的地方,也是數(shù)據(jù)流的來(lái)源和去向之一。
-
處理過(guò)程:判定表/判定樹
7.3 概念結(jié)構(gòu)設(shè)計(jì)
概念模型:①真實(shí)充分反映現(xiàn)實(shí)世界,②易于理解,③易于更改,④易于向關(guān)系模型,網(wǎng)狀模型,層次模型等數(shù)據(jù)模型進(jìn)行轉(zhuǎn)換。
E-R模型:
實(shí)體之間的聯(lián)系:
- 兩個(gè)實(shí)體型之間:一對(duì)一聯(lián)系,一對(duì)多聯(lián)系,多對(duì)多聯(lián)系
- 兩個(gè)以上實(shí)體型:
- 單個(gè)實(shí)體型內(nèi):
E-R圖:
- 實(shí)體型:矩形
- 屬性:橢圓形
- 聯(lián)系:菱形
- 無(wú)向邊:需要標(biāo)注聯(lián)系的類型(1:1,1:m,m:n等)
【考試:先畫含屬性的實(shí)體型圖,再畫一張不含屬性但含聯(lián)系的實(shí)體型圖】
用E-R圖進(jìn)行概念結(jié)構(gòu)設(shè)計(jì):
- 實(shí)體與屬性劃分原則:屬性為①不可再分的數(shù)據(jù)項(xiàng) ②與別的實(shí)體無(wú)聯(lián)系
E-R圖集成:
- 自頂向下需求分析,自底向上設(shè)計(jì)概念結(jié)構(gòu)
過(guò)程:
(1)合并E-R圖,生成初步E-R圖
- 屬性沖突:屬性域沖突,屬性取值單位沖突
- 命名沖突:同名異義,異名同義
- 結(jié)構(gòu)沖突:①同一對(duì)象在不同應(yīng)用中具有不同的抽象 ②同一實(shí)體在不同子系統(tǒng)的E-R圖中包含的屬性個(gè)數(shù)和次序不一致 ③……
(2)消除不必要的冗余,設(shè)計(jì)基本E-R圖
-
分析法:【……不是考察重點(diǎn),不再展開……】
-
規(guī)范化理論:【……不是考察重點(diǎn),不再展開……】
7.4 邏輯結(jié)構(gòu)設(shè)計(jì)
E-R圖向關(guān)系模型的轉(zhuǎn)換
- 1:1的聯(lián)系:可以轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,也可以與任意一端對(duì)于的關(guān)系模式合并。
- 1:n的聯(lián)系:可以轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,也可以與n端對(duì)應(yīng)的關(guān)系模式合并。
- m:n的聯(lián)系:轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式。各實(shí)體的碼組成關(guān)系的碼或關(guān)系碼的一部分。
- 三個(gè)或三個(gè)以上實(shí)體間的一個(gè)多元聯(lián)系可以轉(zhuǎn)換為一個(gè)關(guān)系模式
- 具有相同碼的關(guān)系模式可以合并
數(shù)據(jù)模型的優(yōu)化
以規(guī)范化理論為指導(dǎo):【5條】
水平分解:把(基本)關(guān)系的元組分為若干子集合
垂直分解:把關(guān)系模式R的屬性分解為若干子集合
7.5 物理結(jié)構(gòu)設(shè)計(jì)
- 物理結(jié)構(gòu):主要是存取方法和存取結(jié)構(gòu)
- 對(duì)物理結(jié)構(gòu)進(jìn)行評(píng)價(jià):時(shí)間/空間效率
數(shù)據(jù)庫(kù)物理結(jié)構(gòu)設(shè)計(jì)的內(nèi)容和方法
選擇關(guān)系模式存取方法
(1)B+樹索引方法的選擇
- 一個(gè)/一組屬性經(jīng)常在查詢條件中出現(xiàn),考慮在這個(gè)/這組屬性上建立索引
- 一個(gè)屬性經(jīng)常作為最大值和最小值等聚集函數(shù)的參數(shù),考慮在這個(gè)屬性上建立索引
- 一個(gè)/一組屬性經(jīng)常在連接操作的連接條件中出現(xiàn),考慮在這個(gè)/這組屬性上建立索引。
維護(hù)索引要代價(jià),索引不是越多越好
(2)哈希索引方法的選擇
①大小可預(yù)知且不變,或②關(guān)系大小動(dòng)態(tài)改變,但DBMS支持動(dòng)態(tài)哈希索引方法
(3)聚簇方法的選擇
提高某個(gè)屬性(組)的查詢速度,把這個(gè)或這些屬性上具有相同值的元組集中存放在連續(xù)的物理塊。該屬性(組)稱聚簇碼。
設(shè)計(jì)候選聚簇【3條,略】
檢查候選聚簇中的關(guān)系,取消不必要的關(guān)系【3條,略】
確定數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)
- 確定數(shù)據(jù)存放位置
- 確定系統(tǒng)配置
評(píng)價(jià)數(shù)據(jù)庫(kù)的物理結(jié)構(gòu):存儲(chǔ)空間,存取時(shí)間,維護(hù)代價(jià)等
重組和重構(gòu)
- 數(shù)據(jù)庫(kù)重組:不修改原設(shè)計(jì)的邏輯和物理結(jié)構(gòu)
- 數(shù)據(jù)庫(kù)重構(gòu):部分修改數(shù)據(jù)庫(kù)的模式和內(nèi)模式
7.6 數(shù)據(jù)庫(kù)的實(shí)施和維護(hù)
數(shù)據(jù)的載入和應(yīng)用程序的編碼與調(diào)試
數(shù)據(jù)庫(kù)的試運(yùn)行
數(shù)據(jù)庫(kù)的運(yùn)行和維護(hù)
- 數(shù)據(jù)庫(kù)的轉(zhuǎn)出和恢復(fù)
- 數(shù)據(jù)庫(kù)的安全性/完整性控制
- 數(shù)據(jù)庫(kù)性能的監(jiān)督,分析和改造
- 數(shù)據(jù)庫(kù)的重組與重構(gòu):重組(不修改邏輯和物理結(jié)構(gòu)),重構(gòu)(部分修改數(shù)據(jù)庫(kù)的模式和內(nèi)模式)
【不考】8 數(shù)據(jù)庫(kù)編程
8.1 擴(kuò)展SQL功能
with子句
WITH RECURSIVE 子句
內(nèi)置函數(shù)
通過(guò)高級(jí)語(yǔ)言實(shí)現(xiàn)復(fù)雜應(yīng)用
8.2 過(guò)程化SQL
過(guò)程化SQL的基本結(jié)構(gòu)
變量/常量定義
流程控制:條件控制/循環(huán)控制/錯(cuò)誤處理
存儲(chǔ)過(guò)程:創(chuàng)建/執(zhí)行/修改/刪除/優(yōu)點(diǎn)
# 優(yōu)點(diǎn)
運(yùn)行效率更高,降低了客戶機(jī)和服務(wù)器間的通信量,方便實(shí)施企業(yè)規(guī)則
存儲(chǔ)函數(shù)(必須指定返回類型):創(chuàng)建/執(zhí)行/修改
CREATE OR REPLACE FUNCTION 函數(shù)名
RETURNS <類型>
AS <過(guò)程化SQL塊>
8.3 JDBC編程
Java DataBase Connectivity
結(jié)構(gòu):用戶應(yīng)用程序,JDBC驅(qū)動(dòng)程序管理器,數(shù)據(jù)源
使用JDBC操縱數(shù)據(jù)庫(kù)的工作流程
- 加載驅(qū)動(dòng)程序
- 建立于數(shù)據(jù)庫(kù)的連接
- 執(zhí)行SQL語(yǔ)句
- 處理結(jié)果集
- 釋放資源
【書P263有完整案例】
【不考】9 關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)管理
了解 B+樹索引,哈希索引
10 關(guān)系查詢處理和查詢優(yōu)化
10.1 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的查詢處理
查詢處理步驟:
- 查詢分析( 詞法+語(yǔ)法),
- 查詢檢查(語(yǔ)義,符號(hào)名轉(zhuǎn)換安全性,完整性,這一步生成語(yǔ)法樹),
- 查詢優(yōu)化(代數(shù)優(yōu)化:關(guān)系代數(shù)表達(dá)式的優(yōu)化,物理優(yōu)化:存取路徑和底層操作算法的優(yōu)化,生成查詢執(zhí)行計(jì)劃),
- 查詢執(zhí)行(代碼生成器生成具體代碼)
實(shí)現(xiàn)查詢操作的算法:
選擇操作:
- 全表掃描算法
- 索引掃描算法
- (選擇率大小不同,效率不同,根據(jù)結(jié)果集來(lái)選擇,如果結(jié)果集比較小,就用索引,否則全表掃描)
連接操作:
- 嵌套循環(huán)連接算法(假設(shè)內(nèi)存最大M塊,A表先讀M-1塊,B表先讀1塊,進(jìn)行匹配,然后B表下一塊,B表讀完后,A表再繼續(xù)下一個(gè)M-1塊,直至全部結(jié)束),
- 排序合并連接算法(先對(duì)連接屬性排序,然后對(duì)于同一個(gè)A表按順序讀B表,讀到B表第一個(gè)連接屬性不同的就返回A表讀下一個(gè)),
- 索引連接算法(建立連接屬性的索引,然后根據(jù)索引查找并連接),
- 哈希連接算法(劃分/創(chuàng)建階段:以連接屬性作為哈希碼,把較小的表映射到桶中,試探/連接階段:另一個(gè)表進(jìn)行散列,然后桶中再進(jìn)行匹配)
10.2 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的查詢優(yōu)化
查詢優(yōu)化:選擇有效的策略,求得給定關(guān)系表達(dá)式的值,使得查詢代價(jià)較小。
★一個(gè)實(shí)例P308【可考計(jì)算題】
10.3 代數(shù)優(yōu)化
通過(guò)對(duì)關(guān)系代數(shù)表達(dá)式的等價(jià)變換來(lái)提高查詢效率
關(guān)系代數(shù)表達(dá)式等價(jià)變換規(guī)則【書P309-310】
語(yǔ)法樹的啟發(fā)式優(yōu)化【5條啟發(fā)式規(guī)則】
★大題:畫語(yǔ)法樹,關(guān)系代數(shù)語(yǔ)法樹,優(yōu)化后的語(yǔ)法樹
10.4 物理優(yōu)化
可供選擇的方法有
- 基于啟發(fā)式規(guī)則的優(yōu)化
- 基于代價(jià)估算的優(yōu)化
- 兩者結(jié)合
基于啟發(fā)式規(guī)則的優(yōu)化:
選擇操作的啟發(fā)式規(guī)則:
- 小關(guān)系:用全表順序掃描
- 大關(guān)系:
- 【5條】書P313
連接操作的啟發(fā)式規(guī)則:
- 【4條】書P313
- 選用嵌套循環(huán)連接算法時(shí),選擇其中占用塊數(shù)B較小的表作為外表
基于代價(jià)估算的優(yōu)化
【書P314】
★本章重要簡(jiǎn)答題
1.試述關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)查詢優(yōu)化的一般準(zhǔn)則。
記憶:選擇怎么樣?投影怎么樣?選擇和投影可以怎么樣?選擇和笛卡爾積可以怎么樣?公共子表達(dá)式?連接算法?
(1)盡可能先做選擇運(yùn)算
(2)投影運(yùn)算和選擇運(yùn)算應(yīng)同時(shí)進(jìn)行
(3)把投影和其前后的雙目運(yùn)算結(jié)合起來(lái)
(4)把某些選擇與在它前面要執(zhí)行的笛卡爾積結(jié)合起來(lái)成為一個(gè)連接運(yùn)算
(5)找出公共子表達(dá)式
(6)選取合適的連接算法
2.試述關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)查詢優(yōu)化的一般步驟。
記憶:畫語(yǔ)法樹,優(yōu)化,存取路徑,查詢計(jì)劃
(1)把查詢轉(zhuǎn)換成某種內(nèi)部表示,通常用的內(nèi)部表示是語(yǔ)法樹
(2)利用優(yōu)化算法,優(yōu)化語(yǔ)法樹
(3)選擇低層的存取路徑
(4)生成查詢計(jì)劃并選擇其中代價(jià)最小的一種
11 數(shù)據(jù)庫(kù)恢復(fù)技術(shù)
11.1 事務(wù)的基本概念
事務(wù)(transaction):用戶定義的一個(gè)數(shù)據(jù)庫(kù)操作序列,不做或全做,這個(gè)工作單位不可分割。
顯式定義事務(wù)
BEGIN TRANSACTION;
COMMIT; //正常結(jié)束,提交,所有更新寫回物理數(shù)據(jù)庫(kù)
ROLLBACK; //發(fā)生錯(cuò)誤,回滾,事務(wù)中發(fā)生的操作全部撤銷
★事務(wù)的ACID特性
- 原子性(atomicity):事務(wù)中的操作要么不做要么全做。
- 一致性(consistency):事務(wù)執(zhí)行的結(jié)果必須使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)轉(zhuǎn)移到另一個(gè)一致性狀態(tài)。即完整性。
- 隔離性(isolation):一個(gè)事務(wù)的執(zhí)行不能被其它事務(wù)干擾。
- 持續(xù)性(durability):一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變是永久性的,接下來(lái)其它操作或故障不會(huì)對(duì)它的執(zhí)行結(jié)果造成影響。
事務(wù)ACID遭破壞的可能因素:
- 多個(gè)事務(wù)并行運(yùn)行,不同事務(wù)的操作交叉執(zhí)行(并發(fā)控制機(jī)制)
- 事務(wù)在運(yùn)行過(guò)程中被強(qiáng)行停止(恢復(fù)機(jī)制)
★11.3 故障的種類
- 事務(wù)內(nèi)部的故障:事務(wù)沒有到達(dá)預(yù)期的終點(diǎn)(COMMIT或顯式ROLLBACK)
- 系統(tǒng)故障:(軟故障)造成系統(tǒng)停止運(yùn)轉(zhuǎn),系統(tǒng)要重新啟動(dòng)(尚未完成的數(shù)據(jù)送入物理數(shù)據(jù)庫(kù),破壞原子性/一致性;內(nèi)存/緩沖區(qū)數(shù)據(jù)丟失,破壞事務(wù)持續(xù)性)
- 介質(zhì)故障:(硬故障)外存故障:磁盤損壞,磁頭碰撞,瞬間強(qiáng)磁場(chǎng)干擾,破壞硬盤數(shù)據(jù)的計(jì)算機(jī)病毒等。
11.4 數(shù)據(jù)庫(kù)恢復(fù)的實(shí)現(xiàn)技術(shù)
- 本質(zhì):建立冗余數(shù)據(jù)
- 方法:數(shù)據(jù)轉(zhuǎn)儲(chǔ)(dump)和登記日志文件
分類:
-
事務(wù)故障&系統(tǒng)故障:記錄事務(wù)更新對(duì)象舊值和新值(日志文件),回滾未提交的事務(wù)(恢復(fù)為舊值),重做已提交的事務(wù)(更新為新值),(日志logging技術(shù))
-
介質(zhì)故障:重載備份(數(shù)據(jù)備份backup技術(shù))
數(shù)據(jù)轉(zhuǎn)儲(chǔ)(數(shù)據(jù)備份backup技術(shù))
-
靜態(tài)備份:備份開始時(shí)處于一致性狀態(tài),且沒有事務(wù)正在進(jìn)行(優(yōu):實(shí)現(xiàn)簡(jiǎn)單;缺:必須等待事務(wù)結(jié)束,新事務(wù)等待備份結(jié)束)
-
動(dòng)態(tài)備份:備份操作與用戶事務(wù)并發(fā)進(jìn)行(優(yōu):不用等待結(jié)束,不會(huì)影響新事務(wù)進(jìn)行;缺:僅依靠后備副本無(wú)法保證數(shù)據(jù)有效)
-
全量備份
-
增量備份
登記日志文件(日志logging技術(shù))
-
Undo日志:先寫日志,后寫數(shù)據(jù),最后寫提交標(biāo)記
-
Redo日志:先寫日志,再寫提交標(biāo)記,最后寫數(shù)據(jù)
-
Undo/Redo日志:先寫日志,后寫數(shù)據(jù)
★為什么要先寫日志,后寫數(shù)據(jù)?
- 這兩者之間可能發(fā)生故障,若先寫日志后發(fā)生故障,恢復(fù)時(shí)多做一次不必要的Undo操作,不會(huì)影響數(shù)據(jù)庫(kù)正確性。若先寫數(shù)據(jù)后發(fā)生故障,因?yàn)闆]有日志所以無(wú)法恢復(fù)。
★11.5 恢復(fù)策略
事務(wù)故障:
- 因?yàn)橹皇窃撌聞?wù)發(fā)生的故障
- 反向掃描日志文件,對(duì)該事務(wù)的更新操作做逆操作,直到讀到此事務(wù)的開始標(biāo)記
系統(tǒng)故障:
-
正向掃描日志文件,找出故障發(fā)送前已提交的事務(wù)(有BEGIN TRANSACTION 和 COMMIT),放入REDO-LIST。找出故障時(shí)尚未完成的事務(wù)(只有BEGIN TRANSACTION 但無(wú) COMMIT),放入U(xiǎn)NDO-LIST。
-
對(duì)UNDO-LIST中的事務(wù)做撤銷(反向掃描日志文件,對(duì)每個(gè)更新操作做逆操作,即“更新前的值”寫入數(shù)據(jù)庫(kù))
-
對(duì)REDO-LIST中的事務(wù)做重做(正向掃描日志文件,重新執(zhí)行日志文件登記操作,即“更新后的值”寫入數(shù)據(jù)庫(kù))
介質(zhì)故障:
- 裝入最新數(shù)據(jù)庫(kù)后備副本,恢復(fù)數(shù)據(jù)庫(kù)到最近的一致狀態(tài)
- 裝入相應(yīng)的日志文件副本,重做已完成的事務(wù)
★11.6 具有檢查點(diǎn)的恢復(fù)技術(shù)
問題:搜索整個(gè)日志很耗時(shí),重新執(zhí)行浪費(fèi)大量時(shí)間,日志存儲(chǔ)代價(jià)很大。為了解決這個(gè)問題,新增檢查點(diǎn)。
檢查點(diǎn)記錄{①建立檢查點(diǎn)時(shí)刻所有正在執(zhí)行的事務(wù)清單 ②這些事務(wù)最近一個(gè)日志記錄的地址}
重新開始文件:存放各個(gè)檢查點(diǎn)在日志文件中的地址
利用檢查點(diǎn)恢復(fù)的步驟:
- 從“重新開始文件”中找到最后一個(gè)“檢查點(diǎn)記錄”的地址,在日志文件中找到最后一個(gè)“檢查點(diǎn)記錄”。
- 建立事務(wù)隊(duì)列UNDO-LIST和REDO-LIST,檢查點(diǎn)時(shí)的ACTIVE-LIST初始放入U(xiǎn)NDO-LIST
- 正向掃描直至結(jié)束:若某任務(wù)START,放入U(xiǎn)NDO-LIST;若某任務(wù)COMMIT,放入REDO-LIST
- 對(duì)UNDO-LIST中的事務(wù),從結(jié)束逆向到最后檢查點(diǎn)開始做UNDO,但對(duì)于在檢查點(diǎn)記錄中的ACTIVE事務(wù),要繼續(xù)回推到該事務(wù)的START(總結(jié),UNDO-LIST中的事務(wù)都要完整從結(jié)束反推回START)
- 對(duì)REDO-LIST中的事務(wù),從最后檢查點(diǎn)開始正向掃描,對(duì)每一條做REDO
具體案例:
11.7 數(shù)據(jù)庫(kù)鏡像(了解)
復(fù)制主數(shù)據(jù)庫(kù)到別的地方,可以同時(shí)便利并發(fā)操作的讀取。
12 并發(fā)控制
單處理機(jī)系統(tǒng)中,事務(wù)的并行執(zhí)行實(shí)際上是這些并發(fā)事務(wù)的并行操作輪流交叉運(yùn)行。稱為:交叉并發(fā)方式。
12.1 并發(fā)控制概述
事務(wù)是并發(fā)控制的基本單位。目標(biāo)是保證事務(wù)的隔離性和一致性。
并發(fā)操作帶來(lái)的不一致性主要有:
- 丟失修改(T1和T2讀入同一數(shù)據(jù)各自修改,T2的提交破壞了 T1的修改,導(dǎo)致T1的修改被丟失)
- 臟讀(T1提交的數(shù)據(jù)被T2讀取后又被撤銷,此時(shí)T2讀到的數(shù)據(jù)就是臟的,即不正確的)
- 不可重復(fù)讀(T1讀取數(shù)據(jù)后,T2對(duì)記錄中的數(shù)據(jù)更新,使得T1再次讀取時(shí)得到與之前不一致的值)
- 幻讀(T1讀取數(shù)據(jù)后,T2對(duì)部分記錄插入或刪除,使得T1再次讀取時(shí)發(fā)現(xiàn)一些記錄小時(shí)了或者多出來(lái)了)
并發(fā)控制的主要技術(shù):封鎖(locking),時(shí)間戳(timestamp),樂觀方法,多版本并發(fā)控制
12.2 事務(wù)的隔離級(jí)別
由低到高(數(shù)據(jù)一致性增強(qiáng),系統(tǒng)代價(jià)增高):
- 讀未提交:允許一個(gè)事務(wù)讀取另一個(gè)未提交事務(wù)正在修改的數(shù)據(jù)(避免丟失修改)
- 讀已提交:只允許一個(gè)事務(wù)讀取一個(gè)已提交的數(shù)據(jù)(避免丟失修改,避免臟讀)
- 可重復(fù)讀:一個(gè)十五開始讀取數(shù)據(jù)后,其他事務(wù)就不能再對(duì)該數(shù)據(jù)執(zhí)行更新操作(避免丟失修改,避免臟讀,避免不可重復(fù)讀)
- 可串行化:事務(wù)執(zhí)行順序可串行化(避免所有)
12.3 封鎖
封鎖:事務(wù)T對(duì)某個(gè)數(shù)據(jù)對(duì)象操作前先向系統(tǒng)申請(qǐng)加鎖
基本封鎖類型:
- 排他型鎖(X鎖):寫鎖,只允許事務(wù)T讀取修改A,不允許別的事務(wù)加鎖。
- 共享型鎖(S鎖):讀鎖,允許事務(wù)T讀取A不能修改A,允許別的事務(wù)加S鎖但不能X鎖。
相容矩陣:只有S鎖和S鎖自己可相容,另:空跟別的都可相容
12.4 封鎖協(xié)議
三級(jí)封鎖協(xié)議:定義何時(shí)申請(qǐng)鎖,持續(xù)時(shí)間,何時(shí)釋放
- 一級(jí)封鎖協(xié)議:長(zhǎng)寫鎖。事務(wù)T修改數(shù)據(jù)R前加X鎖,事務(wù)結(jié)束后釋放。(【沒有丟失修改】不保證不臟讀,不保證可重復(fù)讀)
- 二級(jí)封鎖協(xié)議:長(zhǎng)寫鎖+短讀鎖。在一級(jí)協(xié)議上,新增:事務(wù)T讀數(shù)據(jù)R前加S鎖,讀完就可釋放。(【不臟讀】不保證可重復(fù)讀)
- 三級(jí)封鎖協(xié)議:長(zhǎng)寫鎖+長(zhǎng)讀鎖。在一級(jí)協(xié)議上,新增:事務(wù)T讀數(shù)據(jù)R前加S鎖,事務(wù)結(jié)束才可釋放?!究芍貜?fù)讀】
12.5 活鎖和死鎖
活鎖
原因:多個(gè)事務(wù)請(qǐng)求同一個(gè),但有可能先允許了后面的事務(wù),導(dǎo)致前面的事務(wù)一直等待,餓死。
解決方法:采取先來(lái)先服務(wù)的策略
死鎖
原因:T1和T2各自封鎖對(duì)方想要獲得的資源,并同時(shí)請(qǐng)求自己想要獲得的資源
死鎖的預(yù)防;
- 一次封鎖法:一次性將所有數(shù)據(jù)全部加鎖
- 順序封鎖法:預(yù)先規(guī)定封鎖順序,所有事務(wù)都按照這個(gè)順序封鎖。
死鎖的診斷與解除:
- 超時(shí)法:超過(guò)規(guī)定時(shí)間就認(rèn)為發(fā)生了死鎖
- 事務(wù)等待圖法:有向圖,節(jié)點(diǎn)為事務(wù),邊指向等待的事務(wù),若出現(xiàn)回路,則存在死鎖
12.6 并發(fā)調(diào)度的可串行性
調(diào)度不同,可能結(jié)果不同,存在一種正確調(diào)度。
-
串行調(diào)度:(串行調(diào)度的并發(fā)執(zhí)行必然是正確的)
-
可串行化調(diào)度:這種調(diào)度方式產(chǎn)生的結(jié)果與某次串行調(diào)度產(chǎn)生的結(jié)果相同。(可串行化調(diào)度的并發(fā)執(zhí)行是正確的)
-
沖突可串行化調(diào)度:這種調(diào)度在保證沖突操作次序不變的情況下,通過(guò)交換兩個(gè)事務(wù)不沖突操作的次序得到的另一個(gè)調(diào)度是串行的,則該事務(wù)是沖突可串行化的,也必然是可串行化的(充分條件:沖突可串行化→可串行化)
-
沖突操作:不同事務(wù)對(duì)同一數(shù)據(jù)的讀寫/寫寫操作
-
【不同事務(wù)的沖突操作】和【同一事務(wù)的兩個(gè)操作】順序不能互換
做題:判斷一個(gè)調(diào)度是否沖突可串行化調(diào)度?在規(guī)則允許的范圍內(nèi)盡可能交換事務(wù)中各語(yǔ)句的次序,使得事務(wù)能盡可能分離開來(lái),變成串行的,如果能辦到,就是沖突可串行化調(diào)度。
【期末考試8分】例題:R3(B)R1(A)W3(B)R2(B)R2(A)W2(B)R1(B)W1(A),該調(diào)度是沖突可串行化的調(diào)度嗎?為什么?
對(duì)原式中R1(A)依次與右邊的鄰居交換最終得到R3(B)W3(B)R2(B)R2(A)W2(B)R1(A)R1(B)W1(A)這是一個(gè)串行調(diào)度,故原調(diào)度是沖突可串行化調(diào)度。
12.7 兩段鎖協(xié)議
為了保證調(diào)度可串行化,使用兩段封鎖(two-phase lock,2PL)來(lái)實(shí)現(xiàn)可串行化。
遵守兩段鎖協(xié)議的一定是可串行化的。
所有事務(wù)必須分兩個(gè)階段對(duì)數(shù)據(jù)項(xiàng)加鎖和解鎖(讀寫之前申請(qǐng)封鎖,釋放鎖后,不再申請(qǐng)和獲得封鎖)
- 擴(kuò)展階段:獲得封鎖
- 收縮階段:釋放封鎖
★一次封鎖法<>兩段鎖協(xié)議
一次封鎖法遵守兩段鎖協(xié)議,但兩段鎖協(xié)議不要求一次封鎖,故兩段鎖協(xié)議仍然可能發(fā)生死鎖
12.8 封鎖的粒度
封鎖粒度:封鎖對(duì)象的大小(可以是邏輯單元:屬性值,屬性值集合,元組,關(guān)系,索引項(xiàng),整個(gè)索引,整個(gè)數(shù)據(jù)庫(kù);物理單元:數(shù)據(jù)頁(yè),索引頁(yè);物理記錄等)
封鎖粒度↑,并發(fā)度↓,系統(tǒng)開銷↓
多粒度封鎖
多粒度樹(根節(jié)點(diǎn)表示整個(gè)數(shù)據(jù)庫(kù),往下層次依次關(guān)系,元組等)
多粒度封鎖協(xié)議:允許該樹中的每個(gè)節(jié)點(diǎn)被獨(dú)立加鎖,加一個(gè)節(jié)點(diǎn)的鎖時(shí),其子樹上的節(jié)點(diǎn)都加鎖
-
顯式封鎖:直接加到該節(jié)點(diǎn)的鎖
-
隱式封鎖:由于其上級(jí)節(jié)點(diǎn)被加鎖而被加鎖
意向鎖:表明該節(jié)點(diǎn)的子樹上的節(jié)點(diǎn)正在被加鎖。對(duì)任意節(jié)點(diǎn)加鎖時(shí),其所有上層節(jié)點(diǎn)都要加意向鎖。
- 意向共享型鎖(IS):其子樹上的節(jié)點(diǎn)想加S鎖
- 意向排他型鎖(IX):其子樹上的節(jié)點(diǎn)想加X鎖
- 共享意向排他型鎖(SIX鎖):先加S鎖再加IX鎖
- SIX例子:對(duì)某個(gè)表加SIX鎖,讀取整個(gè)表,但更新部分元組。
- 鎖的強(qiáng)度關(guān)系:X>SIX>S,IX>IS
具有意向鎖的多粒度封鎖方法,提高了系統(tǒng)并發(fā)度,減少了加鎖和解鎖開銷。
【期末考試復(fù)習(xí)】
【老師提供】數(shù)據(jù)庫(kù)系統(tǒng)期末考試復(fù)習(xí)提綱(2023)
第一章 緒論
1.1 數(shù)據(jù)庫(kù)的 4 個(gè)基本概念(數(shù)據(jù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng))
-
數(shù)據(jù),是描述事物的符號(hào)記錄。
-
數(shù)據(jù)庫(kù)(DB),是長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi)、有組織、可共享的大量數(shù)據(jù)的集合。
-
數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS),位于用戶與OS之間的數(shù)據(jù)管理軟件。
-
數(shù)據(jù)庫(kù)系統(tǒng)(DBS),是由DB、DBMS及其應(yīng)用開發(fā)工具、應(yīng)用程序和DBA組成的存儲(chǔ)、管理、處理和維護(hù)數(shù)據(jù)的系統(tǒng)。
1.2 數(shù)據(jù)庫(kù)系統(tǒng)的特點(diǎn)、數(shù)據(jù)庫(kù)系統(tǒng)與文件系統(tǒng)的區(qū)別與聯(lián)系
- 特點(diǎn):數(shù)據(jù)共享性高,冗余度低且易擴(kuò)充,獨(dú)立性高,整體數(shù)據(jù)的結(jié)構(gòu)化。
- 聯(lián)系:文件系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng)都用于存儲(chǔ)和管理數(shù)據(jù)
1.3 數(shù)據(jù)模型及三要素
- 數(shù)據(jù)模型:對(duì)現(xiàn)實(shí)世界數(shù)據(jù)特征的抽象
- 三要素:數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)操作,完整性約束
- 數(shù)據(jù)結(jié)構(gòu):描述數(shù)據(jù)庫(kù)的組成對(duì)象以及對(duì)象之間的聯(lián)系。
- 數(shù)據(jù)操作:對(duì)數(shù)據(jù)庫(kù)中各種對(duì)象的實(shí)例允許執(zhí)行的操作的集合,包括操作及有關(guān)的操作規(guī)則。
- 完整性約束:一組完整性規(guī)則。
1.4 數(shù)據(jù)庫(kù)系統(tǒng)的三級(jí)模式結(jié)構(gòu)(外模式、模式、內(nèi)模式)
數(shù)據(jù)庫(kù)的二級(jí)映像功能與數(shù)據(jù)獨(dú)立性(邏輯獨(dú)立性、物理獨(dú)立性)
第二章 關(guān)系數(shù)據(jù)庫(kù)
2.1 碼、主屬性、非主屬性、外碼
2.2 關(guān)系代數(shù) 并、差、交、笛卡爾積、選擇、投影、連接、除運(yùn)算。
2.3 關(guān)系代數(shù)查詢及關(guān)系運(yùn)算
第三章 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言 SQL
3.1 SQL 的基本概念,基本表、視圖。
3.2 基本表及視圖的定義、查詢、更新
3.3 數(shù)據(jù)查詢: 常用的 SQL 語(yǔ)句,常用的查詢、修改、刪除、分組、排序等 SQL 語(yǔ)句
3.4 能熟練使用聚集函數(shù)、通配符
3.5 多表連接查詢、復(fù)合條件連接查詢、嵌套查詢
3.6 數(shù)據(jù)更新 插入數(shù)據(jù)、修改數(shù)據(jù)、刪除數(shù)據(jù)
第四章 數(shù)據(jù)庫(kù)安全性
4.1 數(shù)據(jù)庫(kù)的安全性
- 保護(hù)數(shù)據(jù)庫(kù),以防不合法使用所造成的數(shù)據(jù)泄露,篡改或破壞
4.2 實(shí)現(xiàn)數(shù)據(jù)庫(kù)安全性控制常用的方法和技術(shù)
4.3 掌握用戶、角色的創(chuàng)建及授權(quán)和收回權(quán)限
第五章 數(shù)據(jù)庫(kù)的完整性
5.1 數(shù)據(jù)庫(kù)的完整性
- 數(shù)據(jù)庫(kù)的正確性和相容性
5.2 實(shí)體完整性、參照完整性、用戶定義完整性
第六章 關(guān)系數(shù)據(jù)理論
6.1 對(duì)函數(shù)依賴、碼、主屬性、非主屬性、外碼等有深入的理解
6.2 掌握關(guān)系模式的基本函數(shù)依賴、關(guān)系模式的候選碼
6.2 掌握規(guī)范化理論,能夠判斷給定關(guān)系模式的規(guī)范化程度
6.3 掌握模式的分解,能夠按要求對(duì)給定關(guān)系模式進(jìn)行分解,修改為符合更高一級(jí)的范式
第七章 數(shù)據(jù)庫(kù)設(shè)計(jì)
7.1 掌握數(shù)據(jù)庫(kù)的一般設(shè)計(jì)過(guò)程及每個(gè)階段的主要任務(wù)。
- 需求分析:明確用戶對(duì)數(shù)據(jù)庫(kù)的需求
- 概念結(jié)構(gòu)設(shè)計(jì):設(shè)計(jì)獨(dú)立于具體DBMS的概念模型
- 邏輯結(jié)構(gòu)設(shè)計(jì):根據(jù)概念模型轉(zhuǎn)換得到具體的DBMS邏輯模型
- 物理結(jié)構(gòu)設(shè)計(jì):設(shè)計(jì)存儲(chǔ)結(jié)構(gòu)和存儲(chǔ)路徑
- 數(shù)據(jù)庫(kù)實(shí)施:
- 數(shù)據(jù)庫(kù)運(yùn)行和維護(hù):
7.2 根據(jù)語(yǔ)義設(shè)計(jì)系統(tǒng)的 E-R 圖,并將 E-R 圖轉(zhuǎn)換為關(guān)系模式(寫出關(guān)系名稱和所有屬性)
7.3 對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)方面有自己獨(dú)到的理解
- 【猜測(cè)】可擴(kuò)展性:數(shù)據(jù)庫(kù)模塊化,數(shù)據(jù)庫(kù)模塊可變更的能力
第九章 關(guān)系查詢處理和查詢優(yōu)化
9.1 理解關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)查詢優(yōu)化的主要規(guī)則及步驟
- 記憶(主要規(guī)則):選擇怎么樣?投影怎么樣?選擇和投影可以怎么樣?選擇和笛卡爾積可以怎么樣?公共子表達(dá)式?連接算法?
- 記憶(步驟):畫語(yǔ)法樹,優(yōu)化,存取路徑,查詢計(jì)劃
9.2 了解代數(shù)優(yōu)化、物理優(yōu)化
- 代數(shù)優(yōu)化:對(duì)關(guān)系代數(shù)表達(dá)式的優(yōu)化,按照一定規(guī)則對(duì)關(guān)系代數(shù)表達(dá)式進(jìn)行等價(jià)變換,改變操作的組合及次序,提高查詢效率
- 物理優(yōu)化:對(duì)存取路徑和底層操作算進(jìn)行優(yōu)化
第十章 數(shù)據(jù)庫(kù)恢復(fù)技術(shù)
10.1 對(duì)事務(wù)的基本概念及事務(wù)的 ACID 特性有一定的理解和掌握
【事務(wù)】
10.2 理解數(shù)據(jù)庫(kù)系統(tǒng)中故障的種類
- 事務(wù),介質(zhì),系統(tǒng)
10.3 掌握數(shù)據(jù)庫(kù)恢復(fù)技術(shù)(數(shù)據(jù)轉(zhuǎn)儲(chǔ)或數(shù)據(jù)備份、登記日志文件)
10.4 掌握并能熟練使用具有檢查點(diǎn)的恢復(fù)技術(shù)。
- 【推測(cè)考大題】
第十一章 并發(fā)控制
11.1 并發(fā)控制及并發(fā)操作帶來(lái)的數(shù)據(jù)不一致性
- 丟失修改,臟讀,不可重復(fù)讀
11.2 封鎖技術(shù)及基本封鎖類型(排他鎖和共享鎖)、三級(jí)封鎖協(xié)議
11.3 活鎖和死鎖,死鎖的預(yù)防、診斷與解除
11.4 可串行化調(diào)度及兩段鎖協(xié)議,判斷一個(gè)并發(fā)調(diào)度是不是沖突可串行化調(diào)度。
【兩段鎖協(xié)議】
11.5 了解封鎖粒度及多粒度封鎖。