數據庫學習筆記(一)
文章目錄
1 緒論
1.1 數據庫概述
1.1.1 四個基本概念
- 數據:描述事物的符號記錄
- 數據庫:長期存儲在計算機內,有組織、可共享的大量數據集合,數據特點:永久存儲,有組織,可共享
- 數據庫管理系統:計算機系統軟件,用於數據管理,
- 數據庫系統:數據庫+數據庫管理系統+應用程序+數據庫管理員
1.1.2 數據管理技術發展
1.1.3 數據庫特點
- 數據結構化
- 數據冗餘度低,共享性高且易擴充
- 數據獨立性高(物理獨立性、邏輯獨立性)由二級映像功能保證
1.2 數據模型
1.2.1 兩類數據模型
- 概念模型(conceptual mode):按用戶觀點對數據和信息建模,又稱信息模型
- 邏輯模型和物理模型:邏輯模型面向數據庫管理系統的實現,物理模型面向計算機系統。
1.2.2 數據模型組成要素
- 數據結構:描述數據庫的組成對象和對象之間的聯繫,靜態特性描述
- 數據操作:對數據庫中各對象的實例允許執行的操作集合,動態特性描述
- 數據的完整性約束條件:給定數據模型中 數據及其聯繫所具有的制約和依存條件
1.2.3 常用數據模型
- 層次模型(hierarchical model):用樹形結構表示各類實體和實體間的聯繫,自然直觀,查詢效率高
- 網狀模型(network model):存取效率高,結構複雜
- 關係模型(relational model):建立在嚴格的數學概念基礎上
- 面向對象數據模型(object oriented data model)
1.3 數據庫系統結構
1.3.1 三級模式結構
- 模式(schema):又稱邏輯模式,所有用戶的公共數據視圖,中間層,不涉及物理存儲細節和具體應用程序,是數據的邏輯結構和特徵描述。
- 外模式(subschema):又稱子模式或用戶模式,是數據庫用戶能夠看見和使用的局部數據的邏輯結構和特徵描述,是與特定應用有關的邏輯表示
- 內模式(storage schema):一個數據庫只有一個內模式,是數據的物理結構和存儲方式的描述,是數據在數據庫內部的組織方式
1.3.2 二級映像與數據獨立性
-
外模式-模式映像
模式對應全局邏輯結構,外模式描述局部邏輯結構,一個模式可以對應多個外模式,當模式發生改變時,通過改變外模式-模式映像可以保持外模式不變,即不必修改根據外模式編寫的應用程序,從而實現了數據的邏輯獨立性
-
模式-內模式映像
模式和內模式映像是唯一的,當數據庫的存儲結構發生改變時,通過數據庫管理員修改模式-內模式映像,模式無需改變,可以保證數據與程序的物理獨立性。
2 關係數據庫
2.1 關係數據結構
2.1.1 關係概念
- 域(domain):一組具有相同數據類型的值的集合
- 笛卡爾積(cartesian product):若干域中元素爲分量構造元組
- 域的基數(cardinal number):域中的不同取值個數
- 關係(relation):若干域的笛卡爾積的子集,域的個數即爲關係的度(degree)
- 候選碼(candidate key):一組能唯一標識一個元組的屬性,其真子集不是候選碼,包含候選碼的碼爲超碼。
- 主碼(primary key):被選中的候選碼,用於唯一區別元組
- 關係模式(relation schema):關係的描述稱爲關係模式,形式化表示爲R(U,D,DOM,F),R是關係名,U是屬性名集合,D爲屬性對應的域,DOM爲屬性向域的映像集合,F爲屬性間數據的依賴關係集合,可以簡記爲R(U)
- 外碼(foreign key):關係R中的一組非碼屬性,是關係S的主碼,則稱其是R的外碼,R稱爲參照關係,S稱爲被參照關係
2.1.2 關係完整性
- 實體完整性:主屬性不能取空值,用於保證每個元組是唯一的,可區分的
- 參照完整性:定義了外碼與主碼之間的引用規則,外碼值要麼爲空,要麼與被參照關係中的主碼的值對應。
- 用戶定義完整性:針對具體關係數據庫的約束條件
2.2 關係代數
2.2.1 傳統運算
- 並 union
- 差 except
- 交 intersection
- 笛卡爾積 cartesian product
2.2.2 關係運算
-
選擇(selection)
F爲邏輯判別式,含義爲從關係中選擇使得F成立的元組組成新的關係
-
投影(projection)
關係R上的投影,是從R中選出若干屬性列組成新關係A爲R中的屬性列表
-
連接(join)
$ R{\Join\atop A\theta B}S= {{\stackrel \frown {{t_R}{ t_S}}}|t_R\in R\land t_S\in S\land t_R[A]\theta t_S[B]} $
由R和S中滿足AB關係式的屬性列連接而成的關係。A、B爲屬性列,代表運算符。
兩種重要的連接:等值連接(equijoin)和自然連接(natural join)
是等號時,即爲等值連接。
自然連接是特殊的等值連接,要求進行比較的分量必須是同名屬性,並在結果中去掉重複的屬性列
2.3 關係演算
2.3.1 元組關係演算語言ALPHA
語句基本格式爲:
表達式用於指定預計的操作對象,可以說關係名或屬性名。
操作語句爲GET、PUT、HOLD、UPDATE、DELETE、DROP
RANGE 關係名 變量名
可以聲明元組變量用來代替關係
操作條件中可以添加DOWN/UP 屬性名來使得結果降序或升序排列
2.3.2 元組關係演算
元組演算表達式: 是元組關係演算公式,由原子公式和運算符組成。
原子公式分類:
-
:R代表關係,t是元組變量,表示t是R中的元組
-
:t和u是元組變量,表示t的第i個分量和u的第j個分量滿足運算
-
或 :c是常量, 表示t的第i個分量和c滿足運算
3 關係數據庫標準語言SQL
3.1 SQL概述
3.1.1 特點
-
綜合統一,包括了模式數據定義語言模式DDL,外模式數據定義語言外模式DDL,數據存儲描述語言DSDDL,數據操縱語言DML
-
高度非過程化,無需瞭解存取路徑和操作過程
-
面向集合的操作方式
-
以同一種語法結構提供多種使用方式
-
語言簡潔,易學易用,只有九個核心動詞:
SQL功能 | 動詞 |
---|---|
數據查詢 | SELECT |
數據定義 | CREATE,DROP,ALTER |
數據操縱 | INSERT,UPDATE,DELETE |
數據控制 | GRANT,REVOKE |
3.1.2 基本概念
支持關係數據庫三級模式結構,外模式包括若干視圖和部分基本表,數據庫模式包括若干基本表,內模式八廓若干存儲文件。用戶使用SQL可以對基本表和視圖進行查詢或其它操作。
3.2 數據定義
數據定義語句
操作對象 | 創建 | 刪除 | 修改 |
---|---|---|---|
模式 | CREATE SCHEMA | DROP SCHEMA | |
表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
視圖 | CREATE VIEW | DROP VIEW | |
索引 | CREATE INDEX | DROP INDEX | ALTER INDEX |
3.2.1 模式定義與刪除
--定義
CREATE SCHEMA 模式名 AUTHORIZATION 用戶名
--可以後接視圖和基本表的定義子語句
--刪除
DROP SCHEMA 模式名 CASCADE|RESTRICT
--CASCADE和RESTRICT二選一,前者表示刪除該模式下的所有對象,後者則僅在無下屬的視圖、表對象時執行刪除
3.2.2 基本表的定義,修改和刪除
--定義
CREATE TABLE 表名 (屬性名 數據類型 列級完整性約束,
...
屬性名 數據類型 列級完整性約束,
表級完整性約束
);
--修改
ALTER TABLE 表名
ADD COLUMN 列名 數據類型 列級完整性約束 --添加列
ADD 表級完整性約束 --添加約束
DROP COLUMN 列名 CASCADE|RESTRICT --刪除列
DROP CONSTRAINT 完整性約束 RESTRICT|CASCADE --刪除約束
ALTER COLUMN 列名 數據類型; --修改列
--刪除
DROP TABLE 表名 RESTRICT|CASCADE
3.2.3 索引的建立和刪除
--建立索引
CREATE [UNIQUE] [CLUSTER] INDEX 索引名 ON 表名 (列名 [ASC|DESC],...列名 [ASC|DESC]);
-- UNIQUE表示唯一索引 CLUSTER 表示聚類索引 ASC|DESC表示索引按照屬性值排序的方式
--刪除索引
DROP INDEX 索引名;
--修改索引
ALTER INDEX 舊索引名 RENAME TO 新索引名;
3.3 數據查詢
所有的數據查詢操作,都基於SELECT語句進行
3.3.1 單表查詢
- 查詢語句
--查詢列
SELECT 列名,列名,...列名 FROM 表名;
--查詢列計算值
SELECT 表達式 FROM 表名;
--去重複值
SELECT DISTINCT 查詢表達式 FROM 表名;
--查詢滿足條件的元組
SELECT 查詢表達式 FROM 表名 WHERE 限定條件;
- WHERE子句所滿足條件
查詢條件 | 謂詞 |
---|---|
比較 | =, >, <, >=, <=, !=, <>(不等於), !>, !<, |
確定範圍 | BETWEEN 下限 AND 上限,NOT BETWEEN 下限 AND 上限 |
確定集合 | IN 集合(小括號內+元素), NOT IN 集合 |
字符匹配 | LIKE, NOT LIKE 後跟匹配字符串。可含通配符:%爲任意長度字符,_表示任意單個字符。 |
空值 | IS NULL, IS NOT NULL |
多重條件 | ANDD, OR, NOT |
-
聚集函數
函數形式 功能 COUNT(*) 統級元組個數 COUNT( [DISTINCT|ALL] 列名) 統計某一列中值的個數 SUM( [DISTINCT|ALL] 列名) 計算某一列值的總和 AVG( [DISTINCT| ALL] 列名) 計算該列平均值 MAX( [DISTINCT|ALL] 列名 ) 求最大值 MIN( [DISTINCT|ALL] 列名) 求最小值
3.3.2 連接查詢
使用WHERE子句連接兩個或更多的表進行查詢
連接格式如下:
[表1.列1] 比較運算符 [表2.列2]
[表1.列1] BETWEEN [表2.列2] AND [表2.列3]
當屬性名唯一時,可以省略表名前綴
-
等值連接查詢和非等值連接查詢
連接運算符爲=,是等值連接,其他運算符爲非等值連接
-
自身連接,一表與自身進行連接
-
外連接:分爲左外連接和右外連接,左外連接列出左邊關係中的所有元組,右外連接列出右邊關係中的所有元組
-
多表連接:先兩個表連接 再把結果與第三個表連接
3.3.3 嵌套查詢
SELECT語句可以進行嵌套,但是子查詢語句不能使用ORDER BY進行排序。
-
帶有IN謂詞的子查詢
子查詢的結果作爲查詢限定的集合
-
帶有比較運算符的子查詢
子查詢結果是確定的可以用來比較的值
-
帶有ANY(SOME)或ALL謂詞的子查詢
ANY(SOME)表示某個,ALL表示所有,當子查詢結果有多個時,需要用謂詞修飾後才能進行比較運算。
-
帶有EXISTS謂詞的子查詢
帶有EXISTS的子查詢表示存在量詞判斷,不返回任何數據,只返回真假
3.3.4 集合查詢
SELECT語句的查詢結果是元組的集合,因此多個SELECT語句的結果可以進行集合操作,主要包括並UNION,交INTERSECT和差EXCEPT。
3.3.5 基於派生表的查詢
子查詢同樣可以出現在FROM子句,此時子查詢生成的臨時派生表成爲查詢的對象。
3.3.6 SELECT語句的一般格式
SELECT [ALL|DISTINCT] <目標表達式>[別名],...FROM <表或視圖>[別名][,<表或視圖>[別名], | SELECT子語句] [AS <別名>] [WHERE <條件表達式>]
[GROUP BY <列名> [條件表達式]]
[ORDER BY <列名> [ASC|DESC]]
3.4 數據更新
3.4.1 插入數據
-
插入元組
INSERT INTO 表 (屬性1,屬性2,...) VALUES (值1,值2,...);
-
批量插入子查詢結果
INSERT INTO 表 (屬性1,屬性2,...) SELECT 語句;
可以把子查詢結果批量插入
3.4.2 修改數據
UPDATE 表
SET 列=表達式,...
WHERE 條件
3.4.3 刪除數據
DELETE
FROM 表
WHERE 條件
3.5 空值處理
- 空值判斷:
IS NULL
或IS NOT NULL
- 約束:UNIQUE屬性不能爲空, 屬性約束爲NOT NULL的屬性不能爲空
- 空值運算:空值與另一個值的算術運算結果爲空值,比較運算結果爲UNKNOW,構成三值邏輯。只有邏輯運算爲TRUE才能輸出。
3.6 視圖
3.6.1 定義視圖
CREATE VIEW 視圖名 [列名,列名...] --列名全省或全寫
AS <子查詢> --子查詢語句目標不是列名而是表達式時,必須指定列名
[WITH CHECK OPTION] --CHECK OPTION保證視圖修改時必須滿足子查詢中的限定條件
3.6.2 刪除視圖
DROP VIEW 視圖名 [CASCADE]
基本表刪除後,導出的視圖並沒有被刪除,需要顯式刪除
3.6.3 查詢視圖
同表查詢類似,只是關係數據庫在執行視圖查詢語句時,會先根據視圖定義把查詢語句轉換成對基本表的查詢,即視圖消解。
3.6.4 更新視圖
同視圖查詢類似,同樣通過視圖消解實現對視圖的更新,WITH CHECK OPTION 可以保證不修改不滿足視圖限定條件的數據。
4 數據庫安全性
4.1 數據庫安全性概述
4.1.1 不安全因素
- 非授權用戶對數據庫的惡意存取和破壞
- 重要或敏感數據泄露
- 安全環境的脆弱性
4.1.2 安全標準
- TCSEC 最早
- CC 現用
4.2 數據庫安全性控制
4.2.1 用戶身份鑑別
用戶標識 = 用戶名+用戶標識號(UID)
用戶身份鑑別:
- 靜態口令鑑別
- 動態口令鑑別
- 生物特徵鑑別
- 智能卡鑑別
4.2.2 存取控制
- 定義用戶權限,並將用戶權限等級到數據字典中,稱爲安全規則
- 合法權限檢查,用戶執行操作時,先根據安全規則檢查權限
4.2.3 自主存取控制方法
通過GRANT
和REVOKE
語句實現。
用戶權限由數據庫對象和操作類型組成。
4.2.4 授權與回收
--授權
GRANT 權限,權限...ON 對象類型 對象名,對象類型 對象名 TO 用戶,用戶...
WITH GTANT OPTION --表示當前被授權用戶可以把自己的權限授予其他用戶
--回收
REVOKE 權限 ON 對象類型 對象名 FROM 用戶
4.2.5 數據庫角色
數據庫角色是被命名的一組與數據庫操作相關的權限,角色是權限的集合。可以簡化授權管理。
-
角色的創建
CREATE ROLE 角色名
-
角色授權
GRANT 權限 ON 對象類型 對象名 TO 角色
-
角色賦予
GRANT 角色 TO 角色 ,用戶 WITH ADMIN OPTION -- 可以給其他用戶授權
-
角色權限回收
REVOKE 權限 ON 對象類型 對象名 FROM 角色
4.2.6 強制存取控制方法
用戶不能直接感知或控制。
在強制存取控制中,數據庫管理的實體分爲主體和客體。
主體是系統中的活動實體,包括實際用戶和代表用戶的各個進程。
客體是系統中的被動實體,受主體操控,包括文件、基本表、索引、視圖等。
對於所有主體和客體,系統爲每個實例指派一個敏感度標記(label)。
敏感度標記分爲若干級別。
只允許主體讀取不高於主體敏感度級別的客體,實現訪問控制。
只允許主體寫入不低於主體敏感度級別的客體,從而防止主體把高密級的客體信息寫入低密級的客體,造成信息泄露。
####4.2.7 視圖機制
通過爲不同用戶定義不同的視圖,把數據對象限制在一定範圍內,實現安全防護。
4.3 審計
審計功能把用戶對數據庫的所有操作自動記錄下來放入審計日誌(audit log)中。審計員理由審計日誌監控數據庫的各種行爲。
4.3.1 審計事件
審計事件分爲多個類別:
- 服務器事件:數據庫服務器發生的事件,服務器的啓動、停止、數據庫服務器配置文件的重新加載
- 系統權限:的對系統擁有的結構或模式對象進行操作的審計,要求該操作的權限是通過系統權限獲得的。
- 語句事件:對SQL語句的審計
- 模式對象事件:對特定模式對象上進行的SELECT或DML操作的審計
4.3.2 審計功能
- 基本功能:提供多種審計查閱方式
- 提供多套審計規則
- 提供審計分析和報表功能
- 審計日誌管理功能
- 提供查詢審計設置及審計記錄信息的專門視圖
4.3.3 AUDIT語句和NOAUDIT語句
AUDIT語句用來設置審計功能,NOAUDIT語句取消審計功能。
AUDIT|NOAUDIT 操作 ON 審計對象;
4.4 數據加密
4.4.1 存儲加密
- 透明存儲加密:內核級加密,對用戶透明,在數據寫入磁盤時進行加密,用戶只需要在創建語句中說明需要加密的字段
- 非透明存儲加密:通過多個加密函數實現加密
4.4.2 傳輸加密
對用戶和服務器之間通信進行加密,如鏈路加密和端到端加密。
鏈路加密在鏈路層加密報文和報頭,端到端加密在發送多加密報文,接收端解密報文,無需中間節點密碼設備。
4.5 其他安全性保護
- 推理控制:處理強制存取控制不能解決的問題,避免用戶通過其能夠訪問的數據推導出更高密級的數據。
- 隱蔽信道
- 數據隱私
5 數據庫完整性
5.1 實體完整性
關係模型的實體完整性在CREATE TABLE
語句中用PRIMARY KEY
定義。單屬性主碼可以定義爲列級約束或表級約束,多屬性主碼只能定義爲表級約束。
在數據插入修改時自動檢查主屬性是否爲空,爲空則拒絕插入或修改。
定義方式
--表級約束
CREATE TABLE 表名(屬性名 數據類型 列級約束,
...
PRIMARY KEY(屬性1,屬性2...));
--列級約束
CREATE TABLE 表名(屬性名 數據類型 PRIMARY KEY,
...
表級約束);
5.2 參照完整性
-
定義
CREATE TABLE 參照表(屬性名 數據類型 列級約束, ... FOREIGN KEY(外碼1) 被參照表1(主碼), FOREIGN KEY(外碼2) 被參照表2(主碼), );
-
檢查
被參照表刪除元組或修改主碼,參照表修改外碼或插入元組時,檢查參照完整性。
5.3 用戶定義完整性
5.3.1 屬性約束
- 列值非空:
NOT NULL
- 列值爲一:
UNIQUE
- 檢查列值是否滿足條件表達式:
CHECK(表達式)
5.3.2 元組約束
表級約束,CHECK語句約束
5.4 完整性約束
在創建表的約束時,可以給約束條件命名,從而方便後續的修改刪除。
-
約束命名
在完整性約束條件前加上
CONSTRAINT 約束名
-
約束脩改
--刪除約束 ALTER TABLE 表名 DROP CONSTRAINT 約束名 --新增約束 ALTER TABLE 表名 ADD CONSTRAINT 約束名 約束條件
5.5 斷言
斷言可以對多個表相關數據進行約束,任何涉及斷言中的關係的操作都需要滿足斷言條件。
--定義斷言
CREATE ASSERTION 斷言名 CHECK子句
--刪除斷言
DROP ASSERTION 斷言名
5.6 觸發器
觸發器(trigger)是用戶定義在關係表上的一類由事件驅動的特殊過程,當用戶對關係表執行特定操作並滿足觸發條件時,執行預設語句,因此又叫事件-條件-動作規則
5.6.1 定義觸發器
CREATE TRIGGER 觸發器名
{BEFORE|AFTER} 觸發事件 ON 表名
REFERENCING NEW|OLD ROW AS 變量 -- 行級觸發器的引用
FOR EACH{ROW|STATEMENT} -- 定義觸發器類型
WHEN 觸發條件 --可省略
觸發動作體
-
只有表的創建者纔可以在表上創建觸發器,一個表上可以創建的觸發器數量有限
-
觸發器名和表名必須在同一模式下,同一模式下觸發器名必須唯一
-
觸發器只能定義在基本表上
-
觸發事件包括:
INSERT、UPDATE、DELETE
或動作組合可以在觸發事件中進一步指明細節,具體到對某一列的修改,例如
UPDATE OF 觸發列
- 觸發器類型:
FOR EACH ROW
代表行級觸發器,每影響一行記錄就觸發一次動作,可以通過NEW |OLD
語句在過程體中引用事件發生前的舊值或發生後的新值FOR EACH STATEMENT
代表列級觸發器,觸發後只執行一次動作體
- 觸發器類型:
5.6.2 刪除觸發器
DROP TRIGGER 觸發器名 ON 表名