數據庫複習筆記(一):基礎篇

數據庫學習筆記(一)

文章目錄

1 緒論

1.1 數據庫概述

1.1.1 四個基本概念

  • 數據:描述事物的符號記錄
  • 數據庫:長期存儲在計算機內,有組織、可共享的大量數據集合,數據特點:永久存儲,有組織,可共享
  • 數據庫管理系統:計算機系統軟件,用於數據管理,
  • 數據庫系統:數據庫+數據庫管理系統+應用程序+數據庫管理員

1.1.2 數據管理技術發展

人工管理階段
文件系統階段

1.1.3 數據庫特點

  1. 數據結構化
  2. 數據冗餘度低,共享性高且易擴充
  3. 數據獨立性高(物理獨立性、邏輯獨立性)由二級映像功能保證

1.2 數據模型

1.2.1 兩類數據模型

  1. 概念模型(conceptual mode):按用戶觀點對數據和信息建模,又稱信息模型
  2. 邏輯模型和物理模型:邏輯模型面向數據庫管理系統的實現,物理模型面向計算機系統。

1.2.2 數據模型組成要素

  • 數據結構:描述數據庫的組成對象和對象之間的聯繫,靜態特性描述
  • 數據操作:對數據庫中各對象的實例允許執行的操作集合,動態特性描述
  • 數據的完整性約束條件:給定數據模型中 數據及其聯繫所具有的制約和依存條件

1.2.3 常用數據模型

  • 層次模型(hierarchical model):用樹形結構表示各類實體和實體間的聯繫,自然直觀,查詢效率高
  • 網狀模型(network model):存取效率高,結構複雜
  • 關係模型(relational model):建立在嚴格的數學概念基礎上
  • 面向對象數據模型(object oriented data model)

1.3 數據庫系統結構

1.3.1 三級模式結構

  1. 模式(schema):又稱邏輯模式,所有用戶的公共數據視圖,中間層,不涉及物理存儲細節和具體應用程序,是數據的邏輯結構和特徵描述。
  2. 外模式(subschema):又稱子模式或用戶模式,是數據庫用戶能夠看見和使用的局部數據的邏輯結構和特徵描述,是與特定應用有關的邏輯表示
  3. 內模式(storage schema):一個數據庫只有一個內模式,是數據的物理結構和存儲方式的描述,是數據在數據庫內部的組織方式

1.3.2 二級映像與數據獨立性

  • 外模式-模式映像

    模式對應全局邏輯結構,外模式描述局部邏輯結構,一個模式可以對應多個外模式,當模式發生改變時,通過改變外模式-模式映像可以保持外模式不變,即不必修改根據外模式編寫的應用程序,從而實現了數據的邏輯獨立性

  • 模式-內模式映像

    模式和內模式映像是唯一的,當數據庫的存儲結構發生改變時,通過數據庫管理員修改模式-內模式映像,模式無需改變,可以保證數據與程序的物理獨立性。

2 關係數據庫

2.1 關係數據結構

2.1.1 關係概念

  1. 域(domain):一組具有相同數據類型的值的集合
  2. 笛卡爾積(cartesian product):若干域中元素爲分量構造元組
  3. 域的基數(cardinal number):域中的不同取值個數
  4. 關係(relation):若干域的笛卡爾積的子集,域的個數即爲關係的度(degree)
  5. 候選碼(candidate key):一組能唯一標識一個元組的屬性,其真子集不是候選碼,包含候選碼的碼爲超碼。
  6. 主碼(primary key):被選中的候選碼,用於唯一區別元組
  7. 關係模式(relation schema):關係的描述稱爲關係模式,形式化表示爲R(U,D,DOM,F),R是關係名,U是屬性名集合,D爲屬性對應的域,DOM爲屬性向域的映像集合,F爲屬性間數據的依賴關係集合,可以簡記爲R(U)
  8. 外碼(foreign key):關係R中的一組非碼屬性,是關係S的主碼,則稱其是R的外碼,R稱爲參照關係,S稱爲被參照關係

2.1.2 關係完整性

  1. 實體完整性:主屬性不能取空值,用於保證每個元組是唯一的,可區分的
  2. 參照完整性:定義了外碼與主碼之間的引用規則,外碼值要麼爲空,要麼與被參照關係中的主碼的值對應。
  3. 用戶定義完整性:針對具體關係數據庫的約束條件

2.2 關係代數

2.2.1 傳統運算

  • 並 union RSR\cup S
  • 差 except RSR - S
  • 交 intersection RSR \cap S
  • 笛卡爾積 cartesian productR×SR \times S

2.2.2 關係運算

  • 選擇(selection)

    σF(R)={ttRF(t)=}\sigma_{F}(R) = \{t|t\in R \land F(t)='真'\}

    F爲邏輯判別式,含義爲從關係中選擇使得F成立的元組組成新的關係

  • 投影(projection)
    關係R上的投影,是從R中選出若干屬性列組成新關係

    πA(R)={t[A]tR}\pi_A(R)=\{t[A] |t\in 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中滿足Aθ\thetaB關係式的屬性列連接而成的關係。A、B爲屬性列,θ\theta代表運算符。

    兩種重要的連接:等值連接(equijoin)自然連接(natural join)

    θ\theta是等號時,即爲等值連接。

    自然連接是特殊的等值連接,要求進行比較的分量必須是同名屬性,並在結果中去掉重複的屬性列

2.3 關係演算

2.3.1 元組關係演算語言ALPHA

語句基本格式爲:

:\boxed {操作語句 \quad 工作空間名(表達式): 操作條件}

表達式用於指定預計的操作對象,可以說關係名或屬性名。

操作語句爲GET、PUT、HOLD、UPDATE、DELETE、DROP

RANGE 關係名 變量名可以聲明元組變量用來代替關係

操作條件中可以添加DOWN/UP 屬性名來使得結果降序或升序排列

2.3.2 元組關係演算

元組演算表達式:{t  ϕ(t)}\{t\ |\ \phi(t)\} ϕ(t)\phi(t)是元組關係演算公式,由原子公式和運算符組成。

原子公式分類:

  1. R(t)R(t) :R代表關係,t是元組變量,表示t是R中的元組

  2. t[i]θu[j]t[i]\theta u[j] :t和u是元組變量,表示t的第i個分量和u的第j個分量滿足運算θ\theta

  3. t[i]θct[i]\theta ccθt[i]c\theta t[i]:c是常量, 表示t的第i個分量和c滿足運算θ\theta

3 關係數據庫標準語言SQL

3.1 SQL概述

3.1.1 特點

  1. 綜合統一,包括了模式數據定義語言模式DDL,外模式數據定義語言外模式DDL,數據存儲描述語言DSDDL,數據操縱語言DML

  2. 高度非過程化,無需瞭解存取路徑和操作過程

  3. 面向集合的操作方式

  4. 以同一種語法結構提供多種使用方式

  5. 語言簡潔,易學易用,只有九個核心動詞:

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]

當屬性名唯一時,可以省略表名前綴

  1. 等值連接查詢和非等值連接查詢

    連接運算符爲=,是等值連接,其他運算符爲非等值連接

  2. 自身連接,一表與自身進行連接

  3. 外連接:分爲左外連接和右外連接,左外連接列出左邊關係中的所有元組,右外連接列出右邊關係中的所有元組

  4. 多表連接:先兩個表連接 再把結果與第三個表連接

3.3.3 嵌套查詢

SELECT語句可以進行嵌套,但是子查詢語句不能使用ORDER BY進行排序。

  1. 帶有IN謂詞的子查詢

    子查詢的結果作爲查詢限定的集合

  2. 帶有比較運算符的子查詢

    子查詢結果是確定的可以用來比較的值

  3. 帶有ANY(SOME)或ALL謂詞的子查詢

    ANY(SOME)表示某個,ALL表示所有,當子查詢結果有多個時,需要用謂詞修飾後才能進行比較運算。

  4. 帶有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 插入數據

  1. 插入元組

    INSERT INTO(屬性1,屬性2...)
    VALUES (1,值2...);
    
  2. 批量插入子查詢結果

    INSERT INTO(屬性1,屬性2...)
    SELECT 語句;
    

    可以把子查詢結果批量插入

3.4.2 修改數據

UPDATESET=表達式,...
WHERE 條件

3.4.3 刪除數據

DELETE
FROMWHERE 條件

3.5 空值處理

  1. 空值判斷:IS NULLIS NOT NULL
  2. 約束:UNIQUE屬性不能爲空, 屬性約束爲NOT NULL的屬性不能爲空
  3. 空值運算:空值與另一個值的算術運算結果爲空值,比較運算結果爲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 自主存取控制方法

通過GRANTREVOKE語句實現。

用戶權限由數據庫對象和操作類型組成。

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 審計事件

審計事件分爲多個類別:

  1. 服務器事件:數據庫服務器發生的事件,服務器的啓動、停止、數據庫服務器配置文件的重新加載
  2. 系統權限:的對系統擁有的結構或模式對象進行操作的審計,要求該操作的權限是通過系統權限獲得的。
  3. 語句事件:對SQL語句的審計
  4. 模式對象事件:對特定模式對象上進行的SELECT或DML操作的審計

4.3.2 審計功能

  • 基本功能:提供多種審計查閱方式
  • 提供多套審計規則
  • 提供審計分析和報表功能
  • 審計日誌管理功能
  • 提供查詢審計設置及審計記錄信息的專門視圖

4.3.3 AUDIT語句和NOAUDIT語句

AUDIT語句用來設置審計功能,NOAUDIT語句取消審計功能。

AUDIT|NOAUDIT 操作 ON 審計對象;

4.4 數據加密

4.4.1 存儲加密

  1. 透明存儲加密:內核級加密,對用戶透明,在數據寫入磁盤時進行加密,用戶只需要在創建語句中說明需要加密的字段
  2. 非透明存儲加密:通過多個加密函數實現加密

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 屬性約束

  1. 列值非空:NOT NULL
  2. 列值爲一:UNIQUE
  3. 檢查列值是否滿足條件表達式:CHECK(表達式)

5.3.2 元組約束

表級約束,CHECK語句約束

5.4 完整性約束

​ 在創建表的約束時,可以給約束條件命名,從而方便後續的修改刪除。

  1. 約束命名

    在完整性約束條件前加上CONSTRAINT 約束名

  2. 約束脩改

    --刪除約束
    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 觸發條件 --可省略
觸發動作體
  1. 只有表的創建者纔可以在表上創建觸發器,一個表上可以創建的觸發器數量有限

  2. 觸發器名和表名必須在同一模式下,同一模式下觸發器名必須唯一

  3. 觸發器只能定義在基本表上

  4. 觸發事件包括:INSERT、UPDATE、DELETE或動作組合

    可以在觸發事件中進一步指明細節,具體到對某一列的修改,例如UPDATE OF 觸發列

    1. 觸發器類型:FOR EACH ROW代表行級觸發器,每影響一行記錄就觸發一次動作,可以通過NEW |OLD語句在過程體中引用事件發生前的舊值或發生後的新值FOR EACH STATEMENT代表列級觸發器,觸發後只執行一次動作體

5.6.2 刪除觸發器

DROP TRIGGER 觸發器名 ON 表名
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章