文章目錄
一)數據庫
1. 定義
數據庫是按照數據結構來組織、存儲和管理數據的倉庫
2. 分類
-
關係型數據庫:Oracle、DB2、MySQL等
-
非關係型數據庫:MongoDB、Memecached、Redis等
區別:
關係:安全,浪費空間:磁盤存儲
非關係:效率高,不是特別安全(內存存儲容易丟失)
3. 數據模型
數據模型是數據特徵的抽象
- 概念模型:按用戶觀點對數據和信息建模
- 邏輯模型和物理模型
- 邏輯模型:層次模型,網狀模型,關係模型等
- 物理模型:數據在系統內部(如磁盤)的表現方式和存取方法
數據模型組成要素:數據結構,數據操作,數據完整性約束
概念模型:實體,屬性,碼,實體型,實體集,聯繫
關係模型:關係,元組,屬性,碼,域,分量,關係模式
數據操作:增刪改查
完整性約束:實體完整性,參照完整性,用戶定義完整性
(關係 == 二尾表)
4. 三級結構和二級映像
-
外模式:數據庫用戶能看見和使用的局部數據的邏輯結構和特徵的描述
外模式:模式的子模式
-
模式:數據庫全體數據的邏輯結構和特徵的描述,是所有用戶的公共數據視圖
-
內模式:數據物理結構和存儲方式的描述
二)關係型數據庫
1. 定義
關係型數據庫,是一種建立在關係模型上的數據庫
關係模型:建立在關係(一張二維表)上的模型
2. 組成要素
數據結構
數據操作
完整性約束
- 實體完整性:主鍵(關係的主屬性,不能取空值)
- 參照完整性:外碼(空值,或所引用關係元素的主碼值)
- 用戶定義完整性
3. SQL
關係數據庫的三級結構
外模式:局部數據的邏輯結構和視圖
模式:全局數據
內模式:物理結構和存儲方式
外模式==視圖+部分基本表
模式==若干基本表
內模式==存儲文件
一或多個表,對應一個存儲文件
一個表有若干索引
數據定義語言
- 對象:模式,表,視圖,索引
create
drop
alter
數據更新語言
insert
update
delete
數據查詢語言
select
數據查詢:
指定列:單表查詢,多表查詢
去重:distinct
條件:where(比較,範圍,集合,字符匹配,空值,多重條件)
排序:order by
分組:group by having
聚集函數:count、sum、avg、max、min
連接查詢:等值連接,非等值連接
自身連接
外連接:左外,右外,全
嵌套查詢:any,all謂詞/聚集函數和in等
exists
集合查詢:union,intersect,except
數據控制語言
grant
revoke
4. 數據類型
顯示寬度:用於顯示,長度不夠前綴填充0
- 數值:
- 整數:1,2,3,4,8字節
- 小數:浮點,定點
- 字符串:char,varchar,text,blob,enum,set
- 日期時間:日期時間,日期,時間,時間戳,年份
5. 完整性詳解
實體完整性
主鍵定義
參照完整性
外鍵定義
用戶定義完整性
-
屬性約束:空與非空,唯一,check
name varchar(12) not null card_id char(18) unique not null sex char(2) check (sex in('男', '女')) score int check (score>=0 and score<=100)
-
元組:check
# 男性不能以Ms開頭 check (sex='女' or name not like 'Ms%')
-
完整性約束命名語句:
constraint <完整性約束條件名> <完整性約束條件>
條件:not null,unique,primary key,foreign key,check等
6. 觸發器
-
定義:事件,條件,動作
事件:增刪改,事務的結束等 條件真,觸發動作 create trigger <觸發器名> before|after insert|delete|update [of <屬性>] on <表> referencing #引用變量 oldrow as <別名>, newrow as <別名> for each row [when <條件>] <動作> 說明:若沒有`for each row`,可引用變量爲:oldtable,newtable
-
激活
-
刪除
7. 關係數據庫理論
P第6章 《數據庫系統概論》
基本名詞:平凡函數依賴,非平凡函數依賴,決定因素,完全函數依賴,部分函數依賴,傳遞函數依賴
(完全:X→Y,但X的真子集不能決定Y
(部分:X→Y,但X的真子集→Y
碼,候選碼,超碼,主屬性,非主屬性|非碼屬性
外碼
數據依賴
-
函數依賴:例如學號決定學生信息(姓名,專業…),即y=f(x),x→y
常見問題:數據冗餘,更新異常,插入異常,刪除異常
-
多值依賴
範式
1NF:關係的每一個變量必須是不可分的數據項
表的列,不可分
2NF:每一個非主屬性完全函數依賴於任何一個候選碼
3NF:每一個非主屬性不傳遞依賴、不部分依賴於碼
BCNF:??
排除傳遞和部分函數依賴
## 多值依賴:??
4NF:??
8. 數據庫編程
-
過程化SQL:塊
-
存儲過程和函數
-
過程化SQL的遊標
三)併發控制
1. 事務
事務(一批操作),要麼全成功,要麼全失敗。
特性
ACID
併發事務問題
- 髒讀
- 不可重複讀
- 幻讀
事務隔離級別
- 讀未提交
- 讀已提交
- 可重複讀
- 串行化
併發事務解決方案
- 鎖
- MVCC
事務故障
- 事務故障
- 系統故障:
- 介質故障
- 計算機病毒
數據恢復
-
數據冗餘
數據轉儲:數據庫複製到存儲介質 登記日誌文件
-
數據恢復
2. 併發控制
併發操作帶來的數據不一致性包括:丟失修改
,不可重複讀
,讀髒數據
- 原因:破壞事務隔離性
- 解決:封鎖,時間戳,樂觀控制,多版本併發控制MVCC等
封鎖
X(排他|獨享)鎖和S(共享)鎖
一級封鎖協議:事務修改數據前,加X鎖,事務結束後才解鎖
解決:丟失修改。不解決:不可重複讀,讀髒數據
二級封鎖協議:一級封鎖協議+事務讀數據前,加S鎖,讀完後解鎖
解決:丟失修改,讀髒數據。不解決:不可重複讀
三級封鎖協議:一級封鎖協議+事務讀數據前,加S鎖,事務結束後才解鎖
解決:丟失修改,讀髒數據,不可重複讀
其他問題:活鎖,死鎖
活鎖:某個事務一直處於等待
解決:先來先服務
死鎖:多個事務一直不能結束
解決:預防;診斷——處理
併發調度的可串行性
可串行化調度:多個事務的併發執行結果 == 按某一次序串行執行這些事務的結果
可串行性:併發調度,當且僅當它是串行化,認爲是正確調度
兩段鎖協議:保證併發調度的正確性,從而保證多個事務執行結果的正確
所有事務必須分兩個階段對數據項加鎖和解鎖
1. 在對任何數據進行讀寫之前,首先要申請並獲得該數據的封鎖
2. 在釋放一個封鎖之後,事務不可再申請和獲取任何其他封鎖
封鎖的粒度
封鎖對象的大小,封鎖粒度
- 邏輯單元:屬性值,屬性值集合,元組,關係,索引項,索引,數據庫
- 物理單元:頁,物理記錄等
多粒度封鎖
顯示封鎖:應事務要求直接加到數據對象上的鎖
隱式封鎖:上級節點加鎖
加鎖前,檢查數據對象的顯示封鎖,上級節點——隱式封鎖,下級節點顯示封鎖
效率過低!!
引入意向鎖:避免檢查下級節點的顯示封鎖
IS:父IS,子S
IX:父IX,子X
SIX:加S鎖,再加IX鎖
讀整個表,加S鎖
更新元組,子X,則父IX,即加IX鎖
3. 多版本併發控制
理解不夠,暫略
參考
《數據庫系統概論 第5版》