第一章 緒論
- 4個基本概念:數(shù)據(jù)淫茵、數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)蹬跃、數(shù)據(jù)庫系統(tǒng)
- 數(shù)據(jù):描述事物的符號記錄
- 數(shù)據(jù)的含義稱為數(shù)據(jù)的語義
- 計算機系統(tǒng)層次結(jié)構(gòu):硬件匙瘪、操作系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)蝶缀、應(yīng)用開發(fā)工具丹喻、應(yīng)用系統(tǒng)
- 數(shù)據(jù)庫發(fā)展階段:人工管理階段、文件系統(tǒng)階段翁都、數(shù)據(jù)庫系統(tǒng)階段碍论。從文件系統(tǒng)到數(shù)據(jù)庫系統(tǒng)標著著數(shù)據(jù)管理技術(shù)的飛躍。
- 數(shù)據(jù)庫是計算機的基礎(chǔ)軟件
- 數(shù)據(jù)庫系統(tǒng)特點:
- 數(shù)據(jù)結(jié)構(gòu)化
- 數(shù)據(jù)共享性高荐吵、冗余度低且易擴充
- 數(shù)據(jù)獨立性高
- 物理獨立性:指用戶的應(yīng)用程序與數(shù)據(jù)庫中數(shù)據(jù)的物理儲存時相互獨立的骑冗。
- 邏輯獨立性:指用戶的應(yīng)用程序與數(shù)據(jù)庫的邏輯結(jié)構(gòu)是相互獨立的赊瞬。
- 數(shù)據(jù)由數(shù)據(jù)庫管理系統(tǒng)統(tǒng)一管理和控制
- 數(shù)據(jù)模型: 是數(shù)據(jù)庫系統(tǒng)的核心和基礎(chǔ)。描述了系統(tǒng)的靜態(tài)特性贼涩、動態(tài)特性和完整性約束條件巧涧。
- 第一類:概念模型
- 第二類:邏輯模型和物理模型
- 概念模型表示法:實體聯(lián)系方法:用E-R圖表示。
- 數(shù)據(jù)模型的組成要素:
- 數(shù)據(jù)結(jié)構(gòu)
- 數(shù)據(jù)操作
- 數(shù)據(jù)的完整性約束條件
- 常用數(shù)據(jù)模型:
- 層次模型
- 網(wǎng)狀模型
- 關(guān)系模型:最重要的數(shù)據(jù)模型遥倦,是用二維表的形式表示實體和實體間聯(lián)系的數(shù)據(jù)模型谤绳。
- 面向?qū)ο髷?shù)據(jù)類型
- 對象關(guān)系的數(shù)據(jù)模型
- 半結(jié)構(gòu)化數(shù)據(jù)模型
- 實體:客觀存在且相互可區(qū)別的事物。實體間聯(lián)系:一對一袒哥、一對多缩筛、多對多。
- 基本層次聯(lián)系:指兩個記錄以及它們之間一對多(包括一對一)的聯(lián)系堡称。
- 關(guān)系模型要求關(guān)系必須是規(guī)范化的瞎抛。
- 模式:是數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述。只涉及“型”却紧,不涉及值桐臊。
- 實例:模式的一個具體值。
- 模式是相對穩(wěn)定的晓殊、實例是相對變動的断凶。
-
三級模式結(jié)構(gòu):
- 模式,也稱為邏輯模式
- 外模式巫俺,也稱為子模式或用戶模式认烁。
- 內(nèi)模式:也曾內(nèi)存儲模式。一個數(shù)據(jù)庫中只能有一個內(nèi)模式介汹。
- 兩種映像:外模式/模式映像却嗡、模式/內(nèi)模式映像。
第二章 關(guān)系數(shù)據(jù)庫
- 數(shù)據(jù)模型一般來說是由三個部分組成:
- 數(shù)據(jù)結(jié)構(gòu)
- 數(shù)據(jù)操作
- 數(shù)據(jù)約束
- 域:一組具有相同數(shù)據(jù)類型的值的集合嘹承。
- 一個域允許不同取值的個數(shù)稱為這個域的基數(shù)稽穆。
- 候選碼:某一個屬性組的值能唯一標識一個元組,而其子集不能赶撰,成該屬性組為候選碼。
- 多個候選碼柱彻,選定其中一個為主碼
- 主屬性:候選碼的諸屬性豪娜。
- 非主屬性(或非碼屬性):不包含在任何候選碼中的屬性。
- 關(guān)系的三種類型:
- 基本關(guān)系(基本表或基表)
- 查詢表
- 視圖表
- 基本關(guān)系的六個性質(zhì):
- 列的順序無所謂哟楷。
- 行的順序無所謂瘤载。
- 不同列可以來自同一個域。
- 無限關(guān)系是無意義的卖擅。
- 候選碼不能重復(fù)
- 分量必須取原子值(即不能再分割)【最基本的一條】
- 關(guān)系的完整性(約束):
- 實體完整性:主屬性不能取空值
- 參照完整性鸣奔。
- 用戶自定義完整性墨技。
關(guān)系代數(shù)
- 傳統(tǒng)集合運算:
- 并(union):列還是那么多列,只不過把一行行的數(shù)據(jù)條做了整合挎狸。
- 差(except):把某些數(shù)據(jù)行去掉
- 交(union):列還是那么多列扣汪,數(shù)據(jù)條做整合,取屬于兩個表公有的锨匆。
- 笛卡爾積:n1×m1的表和n2×m2的表作乘積后為 (n1+n2)×(m1+m2)崭别。
- 專門關(guān)系運算:
- 選擇:
等價于
select * from R where F;
如δ_Sage<20(Student)
表示select * from Student where Stage<20
。
- 投影:
等價于:
select A from R;
如π_Sage,Sdept(Student)
為select Sage,Sdept from Student
恐锣。
- 連接:
等價于:
select R.*,S.* from R,S where AθB;
如Student(Student.Sno=SC.Sno)SC
等于select Student.*,SC.* from Student,SC where Student.Sno=SC.Sno
茅主。
- 除運算
第三章 關(guān)系數(shù)據(jù)庫標準語言SQL
- 創(chuàng)建表
create table 表名(
列名 數(shù)據(jù)類型 not null, //非空性約束
列名 數(shù)據(jù)類型 unique, //唯一性約束
列名 數(shù)據(jù)類型 check(檢查條件),//檢查性約束
............
constraint 主鍵名 primary key(主屬性列表),
constraint 外鍵名 foreign key (外鍵屬性列表) references 被參考表名(參考列),
constraint 檢查名 check(校驗條件)
)
- 常用查詢條件:
= , > , < , >= , <= , != , <>(也是不等于), !> , !< , not+上述運算符
-
between and , not between and
- 如
where age between 18 and 20;
等價于where age <=18 and age<=20;
- 如
in , not in
-
like , not like
-
like
可以當做=
用以比較字符串,也可以使用通配符來模糊匹配字符串土榴。%
表示匹配0個或多個字符诀姚,_
匹配一個。\%
用來轉(zhuǎn)義百分號玷禽,以此類推赫段。
-
-
is null,is not null
- 空值不能用
=null
判斷。因為null
不等于任何值论衍。
- 空值不能用
and , or , not
- where子句中不能*加聚集函數(shù)瑞佩。
- 帶有ALL(SOME)以及SOME的謂詞的子查詢
....
where Sage<ANY(select Sage from.........) //有的將ANY寫為SOME
表示Sage小于后面子查詢中的某一個值。
....
where Sage<ALL(select Sage from.........)
表示Sage小于后面子查詢中的任何一個一個值坯台。
- EXISTS和NOT EXISTS謂詞子查詢
....
where exists (select .........)
當后面的子查詢結(jié)果集不為空時炬丸,exists返回true
,否則返回false
蜒蕾。
not exists和exists剛好相反稠炬。
- 插入數(shù)據(jù)
insert into 表名 (屬性名,屬性名,...) values (值1,值2,.....) //屬性名列表可省略
- 修改數(shù)據(jù)
update 表名 set 列名=表達式,列名=表達式,..... where 條件
- 刪除數(shù)據(jù)
delete from 表名 where 條件咪啡。
- 空值運算:表達式中只要含有空值首启,其結(jié)果就是空值。
- 視圖
- 視圖是從一個或幾個基本表(或視圖)導(dǎo)出的表撤摸,它是一個虛表而不是基本表毅桃。
- 數(shù)據(jù)庫中只存放視圖的定義而不存放試圖定義的數(shù)據(jù)。視圖的定義存儲在數(shù)據(jù)字典中准夷≡糠桑基本表刪除的話,視圖還會保留衫嵌,但是因為它是引用的數(shù)據(jù)读宙,當數(shù)據(jù)源(基本表的數(shù)據(jù))已經(jīng)不存在時,視圖就無法使用了楔绞。
- 建立一個視圖
create view 視圖名(列名列表)
as
select ....
from ...
where ...
[with check option;]
其中结闸,如果使用了
with check option```則對該視圖進行插入刪除修改的操作時唇兑,系統(tǒng)自動加上where中的那個條件。
- 一個視圖:①從單個基本表中導(dǎo)出桦锄;②去掉了某些行列但保留了主碼扎附。這樣的視圖交行列子集視圖。
- 視圖是虛表察纯,所以對視圖的更新最終要轉(zhuǎn)換為對基本表的更新帕棉。不是所有視圖都是可更新的。一般的饼记, 行列子集視圖是可更新的香伴,只有對行列子集視圖的數(shù)據(jù)更新和查詢操作才能夠正確轉(zhuǎn)換和執(zhí)行。
- 視圖消解 :從數(shù)據(jù)字典中取出視圖的定義具则,再把定義中的子查詢和用戶的查詢結(jié)合起來即纲,轉(zhuǎn)換成等價的對基本表的查詢,然后在執(zhí)行了修正的查詢博肋,這一過程稱為視圖消解低斋。
第四章 數(shù)據(jù)庫安全性
- 數(shù)據(jù)庫安全性:保護數(shù)據(jù)庫以防止不合法使用所造成的數(shù)據(jù)泄露、更改或破壞匪凡。
- 不安全因素和應(yīng)對措施:
- 非授權(quán)用戶對數(shù)據(jù)庫的惡意存取和破壞:用戶身份鑒別膊畴、存取控制、視圖等病游。
- 數(shù)據(jù)庫中重要或敏感數(shù)據(jù)被泄露:強制存取控制唇跨、數(shù)據(jù)加密儲存、加密傳輸?shù)取?/li>
- 安全環(huán)境脆弱性:加強計算機系統(tǒng)的安全性保證衬衬。
- 自主存取控制方法:
- 用戶權(quán)限:數(shù)據(jù)庫對象和操作類型組成买猖。
- 授權(quán):
grant select,update(sno)
on table Student
to user1;
把select、sno列上update權(quán)限授予用戶user1
grant all privileges
on table Student,Course
to user1,user2
with grant option;
```
把Student,Course上的全部權(quán)限授予user1滋尉、user2玉控,并且,with grant option;表示允許user1狮惜、user2繼續(xù)向別人授予這些權(quán)限高诺。
- 收回權(quán)限
revoke select
on table SC
from public;
把授予**全部用戶**在SC上的修改權(quán)限收回。
revoke insert
on table SC
from user1 cascade;
```
假定user1把insert權(quán)限此前授予別人碾篡,則收回user1權(quán)限同時懒叛,cascade表示將user1授予別人的權(quán)限也都收回來。
- 角色:角色是被命名的一組與數(shù)據(jù)庫操作相關(guān)的權(quán)限耽梅。角色是權(quán)限的集合。
- 創(chuàng)建角色
create role 角色名
- 給角色授權(quán)
grant 權(quán)限,權(quán)限....
on 對象(表名)
to 角色1,角色2
- 將一個角色授予其他的用戶
grant 角色1,角色2,...
to 其他角色胖烛,用戶,.....
[with adimin option]
其中眼姐,[with adimin option]可以讓被授權(quán)者把這種權(quán)限授予給其他角色诅迷。
- 角色權(quán)限收回
revoke 權(quán)限,......
on 對象(表名)
from 角色1,,角色2,.......
- 強制存取控制方法
強制存取控制是對數(shù)據(jù)本身進行密級標記,無論數(shù)據(jù)如何復(fù)制众旗,標記與數(shù)據(jù)是一個不可分割整體罢杉,只有符合密級標記要求的用戶才可以操縱數(shù)據(jù),從而提高安全級別贡歧。
第五章 數(shù)據(jù)庫完整性
- 參照完整性檢查和違約處理:當外鍵所在的子表和被參照的父表發(fā)生數(shù)據(jù)不一致時滩租,有以下策略:
- 拒絕執(zhí)行(默認)
- 級聯(lián)操作
- 設(shè)為空值
foreign key(Sno) references Student(Sno)
on delete cascade /*當刪除Student表的Sno時,該表的Sno對應(yīng)數(shù)據(jù)也刪除*/
on update cascade /*當更新Student表的Sno時利朵,該表的Sno對應(yīng)數(shù)據(jù)也更新*/
- 關(guān)于完整性約束的SQL語句律想、約束條件命名子句,參考:第三章 關(guān)系數(shù)據(jù)庫標準語言SQL——創(chuàng)建表一節(jié)
第六章 關(guān)系數(shù)據(jù)理論
- 數(shù)據(jù)依賴中绍弟,最重要的是函數(shù)依賴和多值依賴技即。
- 關(guān)系模式可能存在問題:
- 數(shù)據(jù)冗余
- 更新異常
- 插入異常
- 刪除異常
- 一個好的模式應(yīng)當不會發(fā)生插入異常、刪除異常和更新異常樟遣,數(shù)據(jù)冗余應(yīng)該盡可能地少而叼。
- 規(guī)范化:一個低一級的范式的關(guān)系模式通過模式分解,轉(zhuǎn)換為若干個高一級的范式的關(guān)系模式集合的過程豹悬。
- 第一范式:是指數(shù)據(jù)庫表的每一列都是不可分割的基本數(shù)據(jù)項葵陵,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復(fù)的屬性瞻佛。簡而言之脱篙,第一范式就是無重復(fù)的列。第一范式(1NF)是對關(guān)系模式的基本要求涤久,不滿足第一范式(1NF)的數(shù)據(jù)庫就不是關(guān)系數(shù)據(jù)庫涡尘。
- 第二范式:若R∈1NF,每一個+非主屬性+完全函數(shù)依賴于+任何一個+候選碼响迂,則R屬于2NF。
不滿足第二范式會發(fā)生:
- 插入異常
- 刪除異常
- 修改復(fù)雜
- 第三范式:不存在這樣的碼X蔗彤、屬性組Y和非主屬性Z川梅,使得X→Y,Y→Z成立且X不依賴于Y然遏,則它是第三范式贫途。若R是第三范式,那么也是第二范式待侵。
- BCNF:若X→Y且X不包含Y時丢早,X中必定含有碼,則屬于BCNF。
考慮R(A,B,C)怨酝,函數(shù)依賴:(A,B)→C傀缩,(B,C)→A,顯然(A,B)农猬、(B,C)都可以作為候選碼赡艰,這個關(guān)系模式中沒有屬性對碼的傳遞依賴和部分依賴,所以它是第三范式斤葱,而且除了(A,B)慷垮、(B,C)沒有其他決定因素,所以它也是BCNF揍堕。 - 總體來說:
- 第一范式+沒有非主屬性對碼的部分函數(shù)依賴=第二范式
- 第二范式+沒有非主屬性對碼的傳遞函數(shù)依賴=第三范式
- 第三范式+沒有主屬性對碼的部分和傳遞依賴=BCNF
- BCNF+沒有非平凡和非函數(shù)依賴的多值依賴=第四范式
- 多值依賴:設(shè)U=X+Y+Z料身,多值依賴X→→Y成立,當且僅當鹤啡,給定一對(x,z)惯驼,就有一組Y值與之對應(yīng),且它至于x有關(guān)递瑰,與z無關(guān)祟牲。這就是說(x,z)給定以后,就有一組y也確定抖部;當保持x不變之變z说贝,則這組y值仍保持不變;一旦x發(fā)生變化慎颗,則y值可能發(fā)生變化乡恕;即這組y值發(fā)生變化的充分條件是x發(fā)生了變化。
- 平凡的多值依賴:上述中Z∈?俯萎。
- 多值依賴具有:
- 對稱性:若X→→Y傲宜,則X→→Z,其中U=X+Y+Z
- 傳遞性:若X→→Y夫啊,Y→→Z函卒,則X→→Z-Y
- 函數(shù)依賴是特殊的多值依賴(平凡的多值依賴):若X→Y,則X→→Y撇眯,且此時若Y'∈Y报嵌,則X→→Y',反之不成立熊榛。
- 模式分解的三種不同定義
- 具有無損連接性:一定能到達第四范式
- 保持函數(shù)依賴:此時模式分解一定能到達第三范式锚国,但不一定到BCNF
- 既要保持函數(shù)依賴,也要有無損連接性:可以到達第三范式玄坦,但不一定到BCNF
第七章 數(shù)據(jù)庫設(shè)計
- 基本步驟:
- 需求分析
- 概念結(jié)構(gòu)設(shè)計
- 邏輯結(jié)構(gòu)設(shè)計
- 物理結(jié)構(gòu)設(shè)計
- 數(shù)據(jù)庫實施
- 數(shù)據(jù)庫運行和維護
第十章 數(shù)據(jù)庫恢復(fù)技術(shù)
- 事務(wù):一個數(shù)據(jù)庫操作序列血筑,要么都做,要么都不做。
- 事務(wù)的ACID特性:
- 原子性
- 一致性
- 隔離性
- 持續(xù)性
- 故障種類:
- 事物內(nèi)部故障
- 系統(tǒng)故障(軟故障)
- 介質(zhì)故障(硬故障)
- 計算機病毒
- 數(shù)據(jù)庫的恢復(fù)技術(shù)
- 數(shù)據(jù)轉(zhuǎn)儲:定期將整個數(shù)據(jù)庫復(fù)制到磁帶豺总、磁盤或其他存儲介質(zhì)上保存起來的過程梆砸。
* 靜態(tài)增量/靜態(tài)海量轉(zhuǎn)儲
* 動態(tài)增量/動態(tài)海量轉(zhuǎn)儲
- 登記日志文件
- 恢復(fù)子系統(tǒng)(檢查點方法)
第十一章 并發(fā)控制
- 事務(wù)是并發(fā)控制的基本單位
- 事務(wù)并發(fā)的種類:
- 交叉并發(fā)
- 同時并發(fā)
- 并發(fā)出現(xiàn)的三類問題:
- 丟失修改
- 不可重復(fù)讀
- 臟讀數(shù)據(jù)
- 并發(fā)的主要技術(shù):
- 封鎖(基本方法)
- 時間戳
- 樂觀控制法
- 多版本并發(fā)控制
- 封鎖
- 排它鎖(X鎖、寫鎖):其他事務(wù)不能再加任何類型的鎖
- 共享鎖(S鎖园欣、讀鎖):可讀但不可修改,其他事務(wù)只能再加S鎖但不能再加X鎖休蟹,直到目前釋放為止沸枯。
- 封鎖協(xié)議
- 一級封鎖協(xié)議(防止丟失修改,保證事務(wù)可恢復(fù)):事務(wù)T修改數(shù)據(jù)R之前必須先加X鎖赂弓,事務(wù)結(jié)束(commit OR rollback)后釋放
- 二級封鎖協(xié)議(防止丟失修改绑榴,保證事務(wù)可恢復(fù),進一步防止臟讀數(shù)據(jù)):一級封鎖協(xié)議之上盈魁,再加上:事務(wù)T讀取數(shù)據(jù)之前加讀鎖S翔怎,讀完后釋放
- 三級封鎖協(xié)議(防止丟失修改,保證事務(wù)可恢復(fù)杨耙,防止臟讀數(shù)據(jù)赤套,防止不可重復(fù)讀):一級封鎖協(xié)議之上,增加:事務(wù)T在讀取數(shù)據(jù)之前必須加S鎖珊膜,事務(wù)結(jié)束后釋放
- 活鎖:某個事務(wù)可能永遠等待容握。解決方法:先來先服務(wù)的策略。
- 死鎖:兩個事務(wù)相互等待车柠,永遠不可能結(jié)束剔氏。解決方法:選擇一個處理死鎖代價最小的事務(wù),將其撤銷竹祷,釋放此事務(wù)的所有鎖谈跛,將其他事務(wù)得以運行。
- 可串行化調(diào)度:多個事務(wù)的并發(fā)是正確的塑陵,當且僅當其結(jié)果與按照某一順序的串行執(zhí)行這些事務(wù)的結(jié)果相同感憾。
- 兩段鎖協(xié)議:可串行化調(diào)度的充分不必要條件
- 第一階段:獲得鎖,也就是擴展階段
- 第二階段:釋放鎖猿妈,也就是收縮階段
- 封鎖粒度:封鎖對象大小叫做封鎖粒度吹菱。