数据库原理 简单基础入门
數(shù)據(jù)庫數(shù)據(jù)特點(diǎn)
Massive 數(shù)據(jù)量大
Presistent 持久
Safe 安全
Multi-user 多用戶
convenient 方便
Efficient 高效
feliable 可靠
一個(gè)數(shù)據(jù)庫網(wǎng)站
https://db-engines.com/en/
數(shù)據(jù)庫的基礎(chǔ)概念
數(shù)據(jù)和信息
信息:客觀事物的存在方式和狀態(tài)
數(shù)據(jù):用來記錄信息的可識(shí)別的符號(hào) 是信息的具體表現(xiàn)形式
數(shù)據(jù)與信息的連接:數(shù)據(jù)是信息的載體 信息是數(shù)據(jù)的內(nèi)涵
數(shù)據(jù)庫 數(shù)據(jù)管理系統(tǒng) 數(shù)據(jù)庫系統(tǒng) 數(shù)據(jù)庫管理員
數(shù)據(jù)庫:
是長期存儲(chǔ)在計(jì)算機(jī)內(nèi) 有組織的 可共享 ,可存儲(chǔ),可讀寫的數(shù)據(jù)集合
數(shù)據(jù)庫管理系統(tǒng):
用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件
數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)
三層模式 兩層印象
邏輯模式:數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,邏輯模式與具體的物理實(shí)現(xiàn)細(xì)節(jié)無關(guān),是一種體現(xiàn)用戶需求的公共數(shù)據(jù)結(jié)構(gòu),(類似于中間件),一個(gè)數(shù)據(jù)庫只有一個(gè)邏輯模式
外模式:具體使用者看到的數(shù)據(jù)結(jié)構(gòu)(局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征),一個(gè)應(yīng)用有多個(gè)外模式
內(nèi)模式:數(shù)據(jù)物理結(jié)構(gòu)和存儲(chǔ)方式的描述,數(shù)據(jù)在數(shù)據(jù)庫內(nèi)部的表示方式,一個(gè)數(shù)據(jù)庫只有一個(gè)內(nèi)模式
外模式印象:每一個(gè)外模式對(duì)應(yīng)一個(gè)外模式印象,定義外模式與邏輯模式的對(duì)應(yīng)關(guān)系
內(nèi)模式印象:定義數(shù)據(jù)全局的邏輯結(jié)構(gòu)與存儲(chǔ)結(jié)構(gòu)之間的對(duì)應(yīng)關(guān)系
兩級(jí)印象保證數(shù)據(jù)的邏輯獨(dú)立性和物理獨(dú)立性。
當(dāng)內(nèi)模式改變了,只要改變內(nèi)模式印象就可以不改變邏輯模式
當(dāng)邏輯模式改變了,改變兩級(jí)印象,就可以不改變外模式和內(nèi)模式
數(shù)據(jù)模型
數(shù)據(jù)模型要滿足模擬真實(shí)世界,便于理解,便于實(shí)現(xiàn)。
數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)操作
數(shù)據(jù)的約束條件
關(guān)系模型
半結(jié)構(gòu)化模型
?網(wǎng)狀模型//早期模型
?層次模型
?XML //網(wǎng)絡(luò)數(shù)據(jù)表示格式,傳輸和存儲(chǔ)數(shù)據(jù)
?JSON
不同的模型具體區(qū)別就是數(shù)據(jù)結(jié)構(gòu)不同
數(shù)據(jù)管理技術(shù)的產(chǎn)生和發(fā)展
人工管理階段
文件管理階段
數(shù)據(jù)庫系統(tǒng)
關(guān)系數(shù)據(jù)庫
關(guān)系數(shù)據(jù)模型
關(guān)系型: 表 、SQL
非關(guān)系型: noSQL
關(guān)系數(shù)據(jù)庫系統(tǒng): 是支持關(guān)系模型的數(shù)據(jù)庫系統(tǒng)
關(guān)系模型:
?關(guān)系數(shù)據(jù)結(jié)構(gòu)
?關(guān)系操作
?完整性約束
關(guān)系數(shù)結(jié)構(gòu):
?單一的數(shù)據(jù)結(jié)構(gòu):關(guān)系
??實(shí)體及實(shí)體間的聯(lián)系均用各種關(guān)系來表示
?數(shù)據(jù)的邏輯結(jié)構(gòu):二維表
??關(guān)系模型中的數(shù)據(jù)結(jié)構(gòu)就是一張二維表
關(guān)系模型建立在幾何代數(shù)之上
域:一組具有相同數(shù)據(jù)類型的值的集合
笛卡爾積:
笛卡爾積每行代表一個(gè)元組,每列代表一個(gè)域。
關(guān)系:
關(guān)系也是一個(gè)二維表
?每行表示一個(gè)元組
?每列是一個(gè)域,表示一個(gè)屬性
碼(key,鍵)
候選碼:在關(guān)系中唯一能標(biāo)識(shí)元組的屬性或?qū)傩约?br /> 主屬性:候選碼的各個(gè)屬性
主碼:用戶選作元組表示的候選鍵
全碼:關(guān)系的說有屬性是這個(gè)關(guān)系的全碼
基本關(guān)系的性質(zhì):
? 列是同質(zhì)的
?列的順序無所謂
?行的順序無所謂
什么是關(guān)系模式
? 關(guān)系模式是對(duì)關(guān)系的描述
? 學(xué)生(學(xué)號(hào),姓名,年齡,性別,籍貫)
? R(A1,A2,A3,A4,A5)
? 關(guān)系是關(guān)系模式在某時(shí)刻的取值
關(guān)系數(shù)據(jù)庫:
在一個(gè)給定的應(yīng)用領(lǐng)域中,實(shí)體及實(shí)體之間聯(lián)系的關(guān)系的集合構(gòu)成一個(gè)關(guān)系數(shù)據(jù)庫
關(guān)系操作:
? 查詢 插入 刪除 修改
關(guān)系操作特點(diǎn):
?集合操作方式
關(guān)系數(shù)據(jù)語言的種類:
? 關(guān)系代數(shù)的語言
? 關(guān)系演算的語言
關(guān)系的完整性約束:
? 實(shí)體完整性
? 參照完整性
? 用戶定義的完整性
(前兩者必須滿足)
實(shí)體完整性:
? 主碼唯一且不為空
? 主屬性不能取空
參照完整性:
外碼:
?一個(gè)關(guān)系中的某個(gè)屬性是某個(gè)關(guān)系的主碼,外碼作為主碼的關(guān)系是參照表
?外碼必須取參照表的合適值或者空置
用戶自定義的完整性:
? 用戶自己定義的規(guī)則
關(guān)系數(shù)據(jù)語言
關(guān)系代數(shù)
一種抽象的數(shù)據(jù)查詢語言
用對(duì)關(guān)系的運(yùn)算來表達(dá)查詢
關(guān)系代數(shù) 關(guān)系演算 :早期 ,現(xiàn)在不用
關(guān)系代數(shù):
? 并 差 交
? 投影 選擇
? 笛卡爾積、連接
? 重命名
運(yùn)算對(duì)象:關(guān)系
運(yùn)算符:4類
運(yùn)算結(jié)果:關(guān)系
投影:
選擇:
笛卡爾積:
連接Join:
等值連接,大于連接,小于連接
自然連接:在等值連接上去除重復(fù)的列
重命名:
等價(jià)運(yùn)算:
運(yùn)算符優(yōu)先級(jí):
表達(dá)樹:
SQL (Structured Query Language)
DDL
數(shù)據(jù)定義語言
定義表:
? 創(chuàng)建表
? 刪除表
? 修改表定義
定義基本表:
?關(guān)系名(表名)
?屬性名(列名)
?屬性數(shù)據(jù)類型
?完整性約束
SQL支持的數(shù)據(jù)類型:
整型:
bigint 8個(gè)字節(jié)
int 4個(gè)字節(jié)
smallint 2個(gè)字節(jié)
tinyint 1個(gè)字節(jié)
bit 只能取0或者1
精確數(shù)值數(shù)據(jù):
decimal (p,q) p數(shù)據(jù)寬度,q小數(shù)點(diǎn)后面的位數(shù)
numeric
浮點(diǎn)數(shù)類型:
float 8個(gè)字節(jié)存儲(chǔ)數(shù)據(jù) ±3.04E+308
real 位數(shù)為24 4個(gè)字節(jié) ±3.04E+38
字符串?dāng)?shù)據(jù)類型:
char : char(n)固定長度為n個(gè)字符的字符串
varchar:varchar(n),可變長度,最長長度為n個(gè)字符串
日期時(shí)間數(shù)據(jù):
data :DATE ‘yyyy-mm-dd’
time:‘hh:mm:ss’
datatime:
主鍵唯一不能為空值,唯一鍵可以為空值。
FOREIGN外鍵 REFERENCE參照表
修改基本表:
刪除基本表:
DML
數(shù)據(jù)操作語言
查詢:
From之后都是SELECT的子句
單表查詢
單表查詢:選擇僅涉及一個(gè)表
SELECT:選擇表中的若干列
WHERE :選擇表中的若干元組
ORDER BY:對(duì)查詢結(jié)果排序
GROUP BY: 對(duì)查詢結(jié)果分組
HAVING:對(duì)分組之后的結(jié)果進(jìn)行篩選
通配符:
通配符配合like使用,like是模糊匹配符
對(duì)于某些情況下 只是希望通配符作為普通字符,可以使用轉(zhuǎn)移字符,
a_b 就是普通的a_b
.
IS NULL 表示 = NULL,= NULL會(huì)報(bào)錯(cuò)
.
集函數(shù):
統(tǒng)計(jì)時(shí)不計(jì)NULL值
HAVING對(duì)分組之后的結(jié)果再做篩選
.
連接查詢
select Stu.* ,SC.* From Stu, SC;--廣義笛卡爾積--等值連接,查詢每個(gè)學(xué)生及其選修課的情況 select Stu.* ,SC.* From Stu, SC where Stu.sno = SC.sno;--查詢計(jì)算機(jī)系學(xué)生的學(xué)號(hào) 姓名 所在系 選修的課程名及成績 select SC.sno ,Sname,ssdept,SC.Cno,Cname,Grade From Stu ,SC,Course where Stu.Sno = Sc.sno and Course.cno = SC.cno and ssdept = 'CS';--自身連接 select a1.Cname as major, a2.Cname as preMajor FROM Course a1,Course a2 where a1.Cpno = a2.cno--要起別名嵌套查詢
集合操作
修改數(shù)據(jù):
刪除數(shù)據(jù):
數(shù)據(jù)控制語言
INDEX
定義索引
索引就是給某一列創(chuàng)建一個(gè)排序,使用查詢語句時(shí),如果創(chuàng)建的索引合適就會(huì)加速查詢的速度,反過來索引會(huì)降低表更新或者插入的速度
VIEW
虛表,從一個(gè)或幾個(gè)基本表導(dǎo)出的表 ,只存放視圖的定義 不會(huì)出現(xiàn)數(shù)據(jù)冗余
定義視圖:
建立
定義基于該視圖的新視圖
刪除
常見視圖形式:
刪除視圖
查詢視圖:
查詢視圖與查詢基本表的方法基本一樣
更新視圖:
嵌入式SQL
DCL
數(shù)據(jù)庫設(shè)計(jì)
數(shù)據(jù)庫設(shè)計(jì)步驟
構(gòu)造最優(yōu)的數(shù)據(jù)模型,建立數(shù)據(jù)庫及其應(yīng)用系統(tǒng)的過程
數(shù)據(jù)分析 ->數(shù)據(jù)建模->關(guān)系數(shù)據(jù)庫模式->關(guān)系數(shù)據(jù)庫管理
數(shù)據(jù)庫設(shè)計(jì)全過程:
規(guī)劃階段:
需求分析階段:
概念設(shè)計(jì)階段:
概念設(shè)計(jì)反映用戶需求的數(shù)據(jù)庫概念結(jié)構(gòu)的概念模型,具有硬件獨(dú)立,軟件獨(dú)立的特點(diǎn)。
局部概念模型->全局概念模型->評(píng)審
概念設(shè)計(jì)方法 ER方法 得到一個(gè)與DBMS無關(guān)的概念模型
邏輯設(shè)計(jì)階段:
將概念模型轉(zhuǎn)換成DBMS支持的數(shù)據(jù)模型相符合的邏輯結(jié)構(gòu)
概念模型 -> 設(shè)計(jì)外模型 -> 設(shè)計(jì)應(yīng)用程序與數(shù)據(jù)庫的接口->評(píng)價(jià)模型->修正模型
物理設(shè)計(jì)階段:
存儲(chǔ)記錄結(jié)構(gòu)設(shè)計(jì)
確定數(shù)據(jù)存放位置
存取方法設(shè)計(jì)
完整性和安全性考慮
程序設(shè)計(jì)
數(shù)據(jù)庫的實(shí)現(xiàn):
用DDL定義數(shù)據(jù)庫結(jié)構(gòu)
組織數(shù)據(jù)入庫
編制調(diào)試應(yīng)用程序
數(shù)據(jù)庫試運(yùn)行
數(shù)據(jù)庫的運(yùn)行與維護(hù):
小結(jié):
數(shù)據(jù)庫的各級(jí)模式是在設(shè)計(jì)過程中逐步形成的
需求分析階段綜合各個(gè)用戶的應(yīng)用需求
概念設(shè)計(jì)獨(dú)立于機(jī)器特點(diǎn),獨(dú)立于各個(gè)DBMS產(chǎn)品的概念模式 用ER圖來描述
概念設(shè)計(jì)工具
ER圖:
ER模型組成元素:
實(shí)體 :對(duì)應(yīng)客觀世界的某一物體
實(shí)體集:多個(gè)實(shí)體組成
屬性 :實(shí)體的某一個(gè)特征稱為屬性,在ER圖中加下劃線的為實(shí)體標(biāo)識(shí)符
聯(lián)系:表示一個(gè)或多個(gè)實(shí)體之間的關(guān)聯(lián)關(guān)系
1:1 聯(lián)系:兩個(gè)實(shí)體集之間的實(shí)體一一對(duì)應(yīng)
1:m 聯(lián)系:實(shí)體集1中的每個(gè)實(shí)體對(duì)應(yīng)實(shí)體及的多個(gè)實(shí)體,反過來實(shí)體集2的多個(gè)實(shí)體對(duì)應(yīng)實(shí)體集1的一個(gè)實(shí)體
m: n 聯(lián)系:實(shí)體集1的多個(gè)實(shí)體對(duì)應(yīng)實(shí)體集2的多個(gè)實(shí)體
E模型概念設(shè)計(jì)的步驟:
設(shè)計(jì)局部ER模型,
綜合局部ER模型得到全局模型
對(duì)全局模型優(yōu)化得到最終ER模型
屬性不可再分:如下圖中的職稱不能作為一個(gè)屬性
如果聯(lián)系有屬性,就考慮把聯(lián)系轉(zhuǎn)化為實(shí)體
案例分析:
ER模型轉(zhuǎn)換成關(guān)系模式:
步驟一:實(shí)體類型的轉(zhuǎn)換
每個(gè)實(shí)體類型轉(zhuǎn)換成一個(gè)關(guān)系模式,實(shí)體的屬性即為關(guān)系模式的屬性,實(shí)體標(biāo)識(shí)符即為關(guān)系模式的鍵
步驟二:聯(lián)系的轉(zhuǎn)換
二元聯(lián)系轉(zhuǎn)化
案例:
ER模型的邏輯設(shè)計(jì)步驟:
導(dǎo)出初始關(guān)系模式集
規(guī)范化處理
模式評(píng)價(jià)
模式修正
設(shè)計(jì)子模式
小結(jié):
ER模型的基本元素
聯(lián)系的設(shè)計(jì)
采用ER模型的概念設(shè)計(jì)步驟
ER模型轉(zhuǎn)化為關(guān)系模式
UML圖
邏輯設(shè)計(jì)工具
針對(duì)一個(gè)問題,確定應(yīng)該構(gòu)幾個(gè)關(guān)系,每個(gè)關(guān)系由哪些屬性組成
規(guī)范化理論是數(shù)據(jù)庫邏輯設(shè)計(jì)的工具
關(guān)系:描述實(shí)體及其屬性、實(shí)體間的聯(lián)系
關(guān)系模式: 用來定義關(guān)系
關(guān)系數(shù)據(jù)庫:基于關(guān)系模型的數(shù)據(jù)庫 利用關(guān)系來描述現(xiàn)實(shí)世界
關(guān)系數(shù)據(jù)庫的模式: 定義這組關(guān)系的關(guān)系模式的全體
數(shù)據(jù)依賴:
定義屬性間的相互關(guān)聯(lián)。
函數(shù)依賴
平凡函數(shù)依賴與非平凡函數(shù)依賴
完全函數(shù)依賴與部分函數(shù)依賴
傳遞函數(shù)依賴
碼
函數(shù)依賴:
多值依賴:
鏈接依賴:
關(guān)系模式的評(píng)價(jià)分析:
數(shù)據(jù)是否冗余過大
更新異常
插入異常
刪除異常
對(duì)于不合適的關(guān)系模式可以分解模式
范式:
范式是數(shù)據(jù)庫中關(guān)系滿足一定要求的不同級(jí)別的集合
1NF
一個(gè)關(guān)系模式R中的所有屬性都是不可分的基本數(shù)據(jù)項(xiàng),關(guān)系數(shù)據(jù)庫的基本要求
2NF
滿足一范式的基礎(chǔ)上,不存在部分函數(shù)依賴的關(guān)系模式
3NF
滿足二范式的基礎(chǔ)上,不存在傳遞函數(shù)依賴的關(guān)系模式
BC范式(達(dá)到BC范式即可滿足一般要求)函數(shù)依賴的最高級(jí)別
小結(jié):
規(guī)范換程度較低的范式會(huì)存在 插入異常 刪除異常 修改復(fù)雜 數(shù)據(jù)冗余的問題,將低級(jí)范式轉(zhuǎn)換為高級(jí)范式 的方法:模式分解
4NF
數(shù)據(jù)庫管理
數(shù)據(jù)庫安全性
只允許有合法使用權(quán)限的用戶訪問允許他存取的數(shù)據(jù)
非法使用數(shù)據(jù)庫的情況:
用戶繞過DBMS的數(shù)據(jù)庫授權(quán)機(jī)制,通過操作系統(tǒng)直接存取 修改 備份數(shù)據(jù)庫中的操作
通過多次查詢數(shù)據(jù),推到出本沒有權(quán)限查看的數(shù)據(jù)
安全性控制方法:
定義存儲(chǔ)權(quán)限:
數(shù)據(jù)對(duì)象,操作類型、
定義一個(gè)用戶可以在那些對(duì)象上進(jìn)行那些操作
檢查存取權(quán)限:
鍵槽用戶操作請求是否超出權(quán)限
授權(quán)粒度:
可以定義的數(shù)據(jù)對(duì)象的范圍,粒度越細(xì),授權(quán)越靈活
數(shù)據(jù)對(duì)象粒度:
數(shù)據(jù)庫
表
屬性列
行
GRANT 授權(quán)
REVOKE回收權(quán)限
可以將視圖機(jī)制與授權(quán)機(jī)制配合使用
審計(jì)日志:將用戶所有操作都記錄
數(shù)據(jù)加密:
將原始數(shù)據(jù)轉(zhuǎn)化為密文
并發(fā)安全控制
事務(wù):
一致性:
隔離性:
持續(xù)性:
丟失修改:
不可重復(fù)讀:
讀臟數(shù)據(jù):
并發(fā)控制:
可串行化的調(diào)度:
封鎖
事務(wù)使用某個(gè)數(shù)據(jù)對(duì)象之前,對(duì)期加鎖,限制其他事務(wù)對(duì)該數(shù)據(jù)的更新,是并發(fā)控制關(guān)鍵。
排他鎖:
共享鎖:
鎖的相容表:
封鎖粒度:
可以對(duì)整個(gè)數(shù)據(jù)庫加鎖,也可以只對(duì)某個(gè)屬性加鎖。
封鎖協(xié)議:
何時(shí)申請加鎖
持鎖時(shí)間
何時(shí)釋放
三級(jí)封鎖協(xié)議: 保證數(shù)據(jù)一致性
一級(jí)封鎖協(xié)議:
2級(jí)封鎖協(xié)議:
三級(jí)封鎖協(xié)議:
**兩段鎖協(xié)議:**保證并行可調(diào)度性
死鎖和活鎖:
活鎖:
某個(gè)事務(wù)永遠(yuǎn)等待,解決辦法,采用先來先服務(wù)策略
死鎖
死鎖預(yù)防:
一次封鎖法
順序封鎖法
診斷并解除
超時(shí)法:事務(wù)等待超過一定時(shí)間,就任務(wù)發(fā)生了死鎖
等待圖法
故障和恢復(fù)
數(shù)據(jù)庫故障:
事務(wù)故障:事務(wù)運(yùn)行過程中,非正常終止
系統(tǒng)故障:計(jì)算機(jī)系統(tǒng)非正常結(jié)束,內(nèi)存區(qū)數(shù)據(jù)丟失
介質(zhì)故障: 外存中數(shù)據(jù)意外丟失
恢復(fù):
數(shù)據(jù)轉(zhuǎn)儲(chǔ):
將整個(gè)數(shù)據(jù)復(fù)制到另一個(gè)磁盤,解決介質(zhì)故障
靜態(tài)轉(zhuǎn)儲(chǔ)
動(dòng)態(tài)轉(zhuǎn)儲(chǔ)
海量轉(zhuǎn)儲(chǔ)與增量轉(zhuǎn)儲(chǔ)
日志文件:
登錄日志文件的數(shù)據(jù):
事務(wù)故障恢復(fù):
系統(tǒng)故障恢復(fù):
小結(jié):
數(shù)據(jù)庫復(fù)制
數(shù)據(jù)庫復(fù)制方式:
對(duì)等復(fù)制:
主從復(fù)制:
級(jí)聯(lián)復(fù)制:
數(shù)據(jù)庫復(fù)制要求:
用戶透明
保持事務(wù)完整性
避免沖突
數(shù)據(jù)庫鏡像:
自動(dòng)把整個(gè)數(shù)據(jù)庫復(fù)制到另一個(gè)磁盤上,出現(xiàn)故障時(shí),自動(dòng)恢復(fù)。
實(shí)現(xiàn)X鎖和S鎖的控制
總結(jié)
以上是生活随笔為你收集整理的数据库原理 简单基础入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LibSVM使用记录 C++ Visua
- 下一篇: “QMYSQL: Unable to a