數據庫
- 一:數據庫緒論
- 數據(Data)
- 數據庫(Database,簡稱DB)
- 數據庫管理系統(DBMS)
- 數據冗餘度:
- 數據的安全性(Security)
- 數據的完整性(Integrity)
- 併發(Concurrency)控制
- 數據庫恢復(Recovery)
- 數據模型
- 聯繫的種類
- 概念模型的表示方法
- 基本數據模型
- 數據庫系統的體系結構
- 二: 關係代數
- 三:關係模型
- 四:關係數據庫設計理論
- 五:完整性約束
- 六:數據庫設計
- 七:數據庫查詢語言
- SQL的發展
- SQL語言主要組成部分
- 數據定義語言(DDL,Data Definition Language)
- 數據操縱語言(DML,Data Manipulation Language)
- 數據控制語言(DCL,Data Control Language)
- SQL語句
- 視 圖 (VIEW)
- 數據查詢(Select)
- 數據查詢是數據庫應用的核心功能
- Select子句——重複元組
- Select子句—— *與屬性列表
- Select子句——更名
- Where 子句
- From 子句
- Order By子句
- 子查詢(Subquery )
- 聚合函數
- 索引
- 八:數據庫恢復技術
- 九:併發控制
一:數據庫緒論
數據(Data)
- 計算機用來描述事物的記錄(文字.圖形.圖像.聲音)
- 數據的形式本身並不能完全表達其內容,需要經過語義解釋。數據與其語義是不可分的
數據庫(Database,簡稱DB)
- 數據庫是長期存儲在計算機內有結構的大量的共享的數據集合。
數據庫管理系統(DBMS)
- 數據庫管理系統是位於用戶與操作系統之間的一層數據管理軟件。
- 數據庫在建立、運用和維護時由數據庫管理系統統一管理、統一控制。
- 數據庫系統(DBS)
- 數據庫系統是指在計算機系統中引入數據庫後的系統構成,一般由數據庫、數據庫管理系統(及其開發工具)、應用系統、數據庫管理員和用戶構成。
數據冗餘度:
- 指同一數據重複存儲時的重複程度。
數據的安全性(Security)
- 數據的安全性是指保護數據,防止不合法使用數據造成數據的泄密和破壞,使每個用戶只能按規定,對某些數據以某些方式進行訪問和處理。
數據的完整性(Integrity)
- 數據的完整性指數據的正確性、有效性和相容性。即將數據控制在有效的範圍內,或要求數據之間滿足一定的關係。
併發(Concurrency)控制
- 當多個用戶的併發進程同時存取、修改數據庫時,可能會發生相互干擾而得到錯誤的結果並使得數據庫的完整性遭到破壞,因此必須對多用戶的併發操作加以控制和協調。
數據庫恢復(Recovery)
- 計算機系統的硬件故障、軟件故障、操作員的失誤以及故意的破壞也會影響數據庫中數據的正確性,甚至造成數據庫部分或全部數據的丟失。DBMS必須具有將數據庫從錯誤狀態恢復到某一已知的正確狀態(亦稱爲完整狀態或一致狀態)的功能。
數據模型
模型
- 是現實世界特徵的模擬和抽象
數據模型
- 也是一種模型,它是現實世界數據特徵的抽象,表示實體以及實體間的聯繫
- 一個用於描述數據、數據間關係、數據語義和數據約束的概念工具的集合
兩級模型的抽象
- 一是概念模型
- (也稱信息模型,用於信息世界的建模),它是按用戶的觀點來對數據和信息建模,主要用於數據庫設計。這類模型強調其語義表達能力,要能夠較方便、直接地表達應用中的各種語義知識,這類模型應爲概念簡單、清晰、易於用戶理解,是用戶和數據庫設計人員之間進行交流的語言。
- 二是數據模型
- (如層次、網狀、關係模型,用於機器世界),它是按計算機系統的觀點對數據建模,主要用於DBMS的實現。這類模型通常需要有嚴格的形式化定義,而且常常會加上一些限制或規定,以便於機器上的實現。還通常有一組嚴格定義了語法和語義的語言,人們可以使用它來定義、操縱數據庫中的數據。
數據模型的三要素
- (1) 數據結構
- 數據結構是所研究的對象類型(Object Type)的集合。這些對象是數據庫的組成部分。一般可分爲兩類:一類是與數據類型、內容、性質有關的對象,如網狀模型中的數據項、記錄,關係模型中的屬性、關係等;一類是與數據之間聯繫有關的對象,如網狀模型中的系型(Set Type)等。
- (2) 數據操作
- 數據操作是指對數據庫中各種對象(型)的實例(值)允許執行的操作的集合。數據庫主要有檢索和更新(插入、刪除、修改)兩大類操作。
- 數據結構是對系統靜態特性的描述,數據操作是對系統動態特性的描述。
- (3) 數據的約束條件
- 數據的約束條件是完整性規則的集合。完整性規則是給定的數據模型中數據及其聯繫所具有的制約和依存規則,用以限定符合數據模型的數據狀態以及狀態的變化,以保證數據的正確、有效、相容。
概念模型
- 實體(Entity)
- 客觀存在並可相互區別的事物稱爲實體。實體可以是具體的人、事、物,也可以是抽象的概念或聯繫,如學生、部門、課程、銀行帳戶、選課、訂貨、演出、比賽等。
- 屬性(Attribute)
- 實體所具有的某一特性稱爲屬性。如學生實體可以由學號、姓名、性別、出生年月、系、入學時間等屬性組成
- 碼(關鍵字,Key)
- 唯一標識實體的(最小的)屬性集稱爲碼。例如學號學生實體的碼
- 域(Domain)
- 屬性的取值範圍稱爲該屬性的域。例如學號的域爲8位整數,姓名的域爲字符串集合,,性別的域爲(男,女)。
- 實體型(Entity Type)
- 具有相同屬性的實體必然具有共同的特徵和性質。用實體名及其屬性名集合來抽象和刻劃同類實體,稱爲實體型。例如:學生(學號,姓名,性別,出生年月,系,入學時間)
- 實體集(Entity Set)
- 同型實體的集合稱爲實體集。例如,全體學生就是一個實體集。
- 聯繫(Relationship)
- 在現實世界中,事物內部以及事物之間是有聯繫的,這些聯繫在信息世界中反映爲實體(型)內部的聯繫和實體(型)之間的聯繫。〖組成實體的各屬性之間以及不同實體集之間的聯繫〗
聯繫的種類
1對1聯繫
- 定義:若對於實體集A中的每一個實體,實體集B中至多有一個實體與之聯繫,反之亦然,則稱實體集A與實體集B具有一對一聯繫,記爲1:1。
1對多聯繫
- 定義:若對於實體集A中的每一個實體,實體集B中有n個實體(n≥0)與之聯繫,反之,對於對於實體集B中的每一個實體,實體集A中至多隻有一個實體與之聯繫,則稱實體集A與實體集B具有一對多聯繫,記爲1:n
多對多聯繫
- 定義:若對於實體集A中的每一個實體,實體集B中有n個實體(n≥0)與之聯繫,反之,對於對於實體集B中的每一個實體,實體集A中也有m個實體(m≥0)與之聯繫,則稱實體集A與實體集B具有多對多聯繫,記爲m:n
概念模型的表示方法
E-R圖
- 使用長方形來表示實體型,框內寫上實體名
- 橢圓型表示實體的屬性,並用無向邊把實體和屬性連接起來
- 用菱形表示實體間的聯繫,菱形框內寫上聯繫名,用無向邊把菱形分別與有關實體相連接,在無向邊旁標上聯繫的類型,若實體之間聯繫也具有屬性,則把屬性和菱形也用無向邊連接上
基本數據模型
層次模型(Hierarchical Model)
- 最早使用的一種模型
- 數據結構是一棵有向樹
- 特點
- (1) 有且僅有一個結點無雙親,該結點稱爲根結點。
- (2) 其他結點有且只有一個雙親
網狀模型(Network Model)
- 數據結構是一個有向圖
- 特點
- (1)有一個以上的結點沒有雙親
- (2)結點可以有多於一個的雙親
- 能表示實體之間的多種複雜聯繫
關係模型(Relational Model)
-
關係模型是用二維表格結構來表示實體及實體之間的聯繫的模型
-
數據結構是一個“二維表框架”組成的集合
-
關係模型概念簡單,清晰,用戶易懂易用,有嚴格的數學基礎
-
大多數數據庫系統都是關係型的
-
主要術語
- 關係:一個關係對應於我們平常講的一張表
- 元組:表中的一行稱爲一個元組
- 屬性:表中的一列稱爲屬性,每列的名稱爲屬性名
- 主碼:表中的某個屬性組,它們的值唯一的標識一個元組
- 域:屬性的取值範圍
- 分量:元組中的一個屬性值
- 關係模式:對關係的描述,用關係名(屬性名1,屬性名2,…,屬性名n)來表示
-
特點
-
- 概念單一:
- 實體或實體之間的聯繫都用關係表示
- 用戶的觀點裏,數據的邏輯結構就是表
-
- 關係必須是規範化的關係
- 指在關係模型中,每一個關係模式要滿足一定的要求或者稱爲規範條件
- 其最基本的要求是每一個分量是一個不可分的數據項,也就是說,不允許表中還有表。
-
- 用戶對數據的檢索操作不過是從原來的表中得到一張新的表
- 在用戶眼中,無論是原始數據還是結果數據,都是同一種數據結構——二維表。
- 數據操作是集合操作,即操作對象和操作結果都是若干元組的集合,而不象非關係模型中那樣單記錄的操作方式。
- 把存取路徑向用戶隱藏起來,提高了數據的獨立性。
-
數據庫系統的體系結構
三層模式:外模式、模式、內模式
- 外模式
- 又稱爲用戶模式,是數據庫用戶和數據庫系統的接口,是數據庫用戶的數據視圖,是數據庫用戶可以看見和使用的局部數據的邏輯結構和特徵的描述
- 一個數據庫通常都有多個外模式。一個應用程序只能使用一個外模式,但同一外模式可爲多個應用程序所用
- 模式
- 可細分爲概念模式和邏輯模式,是所有數據庫用戶的公共數據視圖,是數據庫中全部數據的邏輯結構和特徵的描述。
- •一個數據庫只有一個模式。模式不但要描述數據的邏輯結構,還要描述數據之間的聯繫、數據的完整性、安全性要求。
- 內模式
- 又稱爲存儲模式,是數據庫物理結構和存儲方式的描述,是數據在數據庫內部的表示方式。
- •一個數據庫只有一個內模式。內模式並不涉及物理記錄,也不涉及硬件設備。
•二層映象功能:外模式/模式映象和模式/內模式映象
- 三層模式關係
- 數據庫模式是數據庫的核心和關鍵,外模式通常是模式的子集。數據按外模式的描述提供給用戶,按內模式的描述存儲在硬盤上,而模式介於外、內模式之間,既不涉及外部的訪問,也不涉及內部的存儲,從而起到隔離作用,有利於保持數據的獨立性,內模式依賴於全局邏輯結構,但可以獨立於具體的存儲設備
- 映象
- 是一種對應規則,說明映象雙方如何進行轉換。
- 外模式/模式映象
- 作用:把描述局部邏輯結構的外模式與描述全局邏輯結構的模式聯繫趣來
- 當模式改變時,只要對外模式/模式映象做相應的改變,使外模式保持不變,則以外模式爲依據的應用程序不受影響,從而保證了數據與程序之間的邏輯獨立性,也就是數據的邏輯獨立性
- 模式/內模式映象
- 作用:把描述全局邏輯結構的模式與描述物理結構的內模式聯繫起來
- 當內模式改變時,比如存儲設備或存儲方式有所改變,只要模式/內模式映象做相應的改變,使模式保持不變,則應用程序就不受影響,從而保證了數據與程序之的物理獨立性。
二: 關係代數
普通的集合運算
- 並、交、差
刪除部分關係的運算
- 選擇、投影
合併兩個關係元組的運算
- 連接、積
更名操作
關係代數
並Union (∪)
- R和S的並,R∪S,是在R或S或兩者中的元素的集合
- 一個元素在並集中只出現一次
- R和S必須同類型(屬性集相同、次序相同,但屬性名可以不同)
交Intersect (∩)
- R和S的交,R∩S,是在R和S中都存在的元素的集合
- 一個元素在交集中只出現一次
- R和S必須同類型(屬性集相同、次序相同,但屬性名可以不同)
差Minus (-)
- R和S的差,R-S,是在R中而不在S中的元素的集合
- R和S必須同類型(屬性集相同、次序相同,但屬性名可以不同)
投影Projection(π)
- 從關係R中選擇若干屬性組成新的關係
- πA1,A2,…,An®,表示從R中選擇屬性集A1,A2,…,An組成新的關係
- 列的運算
- 投影運算的結果中,也要去除可能的重複元組
廣義笛卡兒積(×)
- 關係R、S的廣義笛卡兒積是兩個關係的元組對的集合所組成的新關係
- R×S:
- 屬性是R和S的組合(有重複)
- 元組是R和S所有元組的可能組合
- 是R、S的無條件連接,使任意兩個關係的信息能組合在一起
選擇Selection(σ)
- 從關係R中選擇符合條件的元組構成新的關係
- σC®,表示從R中選擇滿足條件(使邏輯表達式C爲真)的元組
- 行的運算
條件連接(θ)
- 從R×S的結果集中,選取在指定的屬性集上滿足AθB條件的元組,組成新的關係
- θ是一個關於屬性集的比較運算符
- θ爲“=”的連接運算稱爲等值連接。
自然連接
- 從R×S的結果集中,選取在某些公共屬性上具有相同值的元組,組成新的關係
- R、S的公共屬性
- 屬性集的交集(名稱及類型相同)
*特點: 公共屬性在結果中只出現一次
- 屬性集的交集(名稱及類型相同)
- 等值連接
三:關係模型
四:關係數據庫設計理論
對數據庫操作時,會出現以下問題
-
-
數據冗餘(系主任名的存儲次數)
數據重複存儲:浪費存儲空間,數據庫維護困難(更新異常)
-
-
- 插入異常(一個系剛成立)
- 主碼爲空的記錄不能存在與數據庫,導致不能進行插入操作
-
-
刪除異常(一個系的學生全部畢業)
刪除操作後,一些相關信息無法保存在數據庫中
-
要消除以上的“弊病”,把上面的關係數據庫模式分解爲三個關係模式
函數依賴
類似於變量之間的單值函數關係
Y=F(X),其中自變量X的值,決定一個唯一的函數值Y
在一個關係模式裏的屬性,由於它在不同元組裏屬性值可能不同,由此可以把關係中的屬性看作變量。 一個屬性與另一個屬性在取值上可能存在制約關係
幾點說明
-
- 函數依賴是語義範疇的概念.它反映了一種語義完整性約束,只能根據語義來確定一個函數依賴.
-
- 函數依賴是指關係R模式的所有關係元組均應滿足的約束條件,而不是關係模式中的某個或某些元組滿足的約束條件
候選碼的兩個性質
-
- 標識的唯一性: 對於R(U)中的每一元組,K的值確定後,該元組就相應確定了.
-
- 無冗餘性: K是屬性組的情況下,K的任何一部分都不能唯一標識該元組(定義中的完全函數依賴的意義)
範式
第一範式(1NF)
- 定義5: 在關係模式R中的每一個具體關係r中,如果每個屬性值都是不可再分的最小數據單位,則稱R是第一範式的關係,記作R∈1NF.
- 數據庫理論研究的是規範化關係.
- 1NF規範化: 把非規範化關係規範提高到1NF關係模式的集合.
第二範式(2NF)
- 定義6: 若關係模式R∈1NF,且每個非主屬性都完全依賴於R的任意候選碼,則關係模式R屬於第二範式,記作R ∈2NF.
- 2NF規範化是把1NF關係模式規範提高到變成2NF關係模式的集合.
- 從1NF中消除非主屬性對候選碼的部分函數依賴,則獲得2NF關係.
- 舉例:UN(Sno,Cno,G,SDN,MN)
第三範式(3NF)
- : 若關係模式R∈2NF,且每個非主屬性都不傳遞依賴於R的任意候選碼,則R∈3NF.
- 從2NF關係中,消除非主屬性對碼的傳遞依賴函數而獲得3NF關係
- R∈3NF,則每個非主屬性既不部分依賴,也不傳遞依賴於R的任何候選碼.
BCNF範式
- 定義8: 若R∈1NF,且R中每個決定因素都是候選碼,則R ∈BCNF.
* 滿足BCNF的關係將消除任何屬性對候選碼的部分依賴與傳遞依賴
* 應用BCNF定義時,可直接判斷1NF是否屬於BCNF
五:完整性約束
六:數據庫設計
數據庫設計的步驟
⒈需求分析階段
- 收集和分析用戶需求,結果得到數據字典描述的數據需求。
- 常用的調查方法
- ⑴跟班作業
- ⑵開調查會
- ⑶請專人介紹
- ⑷詢問對某些調查中的問題,可以找專人詢問。
- ⑸設計調查表請用戶填寫
- ⑹查閱記錄
⒉概念結構設計階段
- 通過對用戶需求進行綜合、歸納與抽象,形成一個獨立於具體DBMS的概念模型,可以用E-R圖表示。這是數據庫設計的關鍵
⒊邏輯結構設計階段
- 將概念結構轉換爲某個DBMS所支持的數據模型(例如關係模型),並對其進行優化(例如使用範式理論)
⒋數據庫物理設計階段
- 爲邏輯數據模型選取一個最適合應用環境的物理結構(包括存儲結構和存取方法)。
⒌數據庫實施階段
- 運用DBMS提供的數據語言(例如SQL)及其宿主語言(例如C),根據邏輯設計和物理設計的結果建立數據庫,編制與調試應用程序,組織數據入庫,並進行試運行
⒍數據庫運行和維護階段
- 數據庫應用系統經過試運行後即可投入正式運行。在數據庫系統運行過程中必須不斷地對其進行評價、調整與修改
數據字典
- 對數據庫設計來講,數據字典是進行數據收集和數據分析所獲得的主要成果。數據字典是各類數據描述的集合。
- 數據字典通常包括數據項、數據結構、數據流、數據存儲和處理過程五個部分。
- 數據項是不可再分的數據單位
- 數據結構反映了數據之間的組合關係。一個數據結構可以由若干個數據項組成,也可以由若干個數據結構組成,或由若干個數據項和數據結構混合組成
- 數據流是數據結構在系統內傳輸的路徑
- 數據存儲是數據結構停留或保存的地方,也是數據流的來源和去向之一
- 處理過程描述={處理過程名,說明,輸入:{數據流},輸出:{數據流}, 處理:{簡要說明}}
設計概念結構通常有四類方法
自頂向下
- 即首先定義全局概念結構的框架,然後逐步細化。
自底向上
- 即首先定義各局部應用的概念結構,然後將它們集成起來,得到全局概念結構。這是最經常採用的策略。即自頂向下地進行需求分析,然後再自底向上地設計概念結構
逐步擴張
- 首先定義最重要的核心概念結構,然後向外擴充,以滾雪球的方式逐步生成其他概念結構,直至總體概念結構
混合策略
- 即將自頂向下和自底向上相結合,用自頂向下策略設計一個全局概念結構的框架,以它爲骨架集成由自底向上策略中設計的各局部概念結構
E-R圖
要點
- 使用長方形來表示實體型,框內寫上實體名
- 橢圓型表示實體的屬性,並用無向邊把實體和屬性連接起來。
- 用菱形表示實體間的聯繫,菱形框內寫上聯繫名,用無向邊把菱形分別與有關實體相連接,在無向邊旁標上聯繫的類型,若實體之間聯繫也具有屬性,則把屬性和菱形也用無向邊連接上。
E-R圖之間的衝突主要有三類
- 屬性衝突
- (1) 屬性域衝突,即屬性值的類型、取值範圍或取值集合不同。
- (2) 屬性取值單位衝突
- 命名衝突
- (1) 同名異義
- (2) 異名同義(一義多名)
- 結構衝突
- (1) 同一對象在不同應用中具有不同的抽象。例如“教材”在某一局部應用中被當作實體,而在另一局部應用中則被當作屬性
- (2) 同一實體在不同局部視圖中所包含的屬性不完全相同,或者屬性的排列次序不完全相同
- (3) 實體之間的聯繫在不同局部視圖中呈現不同的類型。例如實體E1與E2在局部應用A中是多對多聯繫,而在局部應用B中是一對多聯繫;又如在局部應用X中E1與E2發生聯繫,而在局部應用Y中E1、E2、E3三者之間有聯繫
數據庫物理設計
- 確定數據庫存儲結構時要綜合考慮存取時間、存儲空間利用率和維護代價三方面的因素。這三個方面常常是相互矛盾的。
爲了提高系統性能,數據應該根據應用情況將易變部分與穩定部分、經常存取部分和存取頻率較低部分分開存放
七:數據庫查詢語言
SQL的發展
1974年,由Boyce和Chamberlin提出
1975~1979,IBM San Jose Research Lab的關係數據庫管理系統原型System R實施了這種語言
SQL-86是第一個SQL標準
SQL-89、SQL-92(SQL2)、SQL-99(SQL3)
SQL語言主要組成部分
數據定義語言(DDL,Data Definition Language)
- 數據定義語言是指用來定義和管理數據庫以及數據庫中的各種對象的語句,這些語句包括CREATE、ALTER和DROP等語句。在SQL Server中,數據庫對象包括表、視圖、觸發器、存儲過程、規則、缺省、用戶自定義的數據類型等。這些對象的創建、修改和刪除等都可以通過使用CREATE、ALTER、DROP等語句來完成。
- 常見的數據類型
- 字符型:
-
定長字符型 char(n) 由於是定長,所以速度快
-
變長字符型 varchar(n)
-
- 數值型:
-
整型 int(或integer) -231~+231
-
短整型 smallint -215~+215的
-
浮點型 real、float、double
-
數值型 numeric (p [,d])
-
- 日期/時間型:
-
DateTime
-
- 文本和圖像型
- Text:存放大量文本數據。在SQLServer中,Text對象實際爲一指針
- Image:存放圖形數據
- 字符型:
數據操縱語言(DML,Data Manipulation Language)
- 數據操縱語言是指用來查詢、添加、修改和刪除數據庫中數據的語句,這些語句包括SELECT、INSERT、UPDATE、DELETE等。在默認情況下,只有sysadmin、dbcreator、db_owner或db_datawriter等角色的成員纔有權利執行數據操縱語言。
數據控制語言(DCL,Data Control Language)
- 數據控制語言(DCL)是用來設置或者更改數據庫用戶或角色權限的語句,這些語句包括GRANT、REVOKE 、DENY等語句,在默認狀態下,只有sysadmin、dbcreator、db_owner或db_securityadmin等角色的成員纔有權利執行數據控制語言。
SQL語句
建立表結構 Create
- 定義基本表的語句格式:
- CREATE TABLE <表名>(<列定義>[{,<列定義>,<表約束>}])
- 表名:
- 列定義:列名、列數據類型、長度、是否允許空值等。
- 定義完整性約束:列約束和表約束
- [CONSTRAINT<約束名>] <約束定義>
刪除表結構 Drop
- 用SQL刪除關係(表)
- 將整個關係模式(表結構)徹底刪除
- 表中的數據也將被刪除
修改表結構 Alter
- 增加表中的屬性
- 向已經存在的表中添加屬性
- allow null (新添加的屬性要允許爲空)
- 已有的元組中該屬性的值被置爲Null
- 修改表中的某屬性(某列)
- 修改屬性類型或精度
- 刪除表中的某屬性(某列)
- 去除屬性及相應的數據
向表中添加數據(Insert)
- 數據添加
- 用SQL的插入語句,向數據庫表中添加數據
- 按關係模式的屬性順序
- 按指定的屬性順序,也可以只添加部分屬性(非Null屬性爲必需)
數據刪除(Delete)
- 只能對整個元組操作,不能只刪除某些屬性上的值
- 只能對一個關係起作用,若要從多個關係中刪除元組,則必須對每個關係分別執行刪除命令
- 刪除單個元組
- 刪除多個元組
- 刪除整個關係中的所有數據
數據更新(Update)
- 改變符合條件的某個(某些)元組的屬性值
視 圖 (VIEW)
視圖是從一個或者多個表或視圖中導出的表,其結構和數據是建立在對錶的查詢基礎上的。和真實的表一樣,視圖也包括幾個被定義的數據列和多個數據行,但從本質上講,這些數據列和數據行來源於其所引用的表。因此,視圖不是真實存在的基礎表而是一個虛擬表,視圖所對應的數據並不實際地以視圖結構存儲在數據庫中,而是存儲在視圖所引用的表中。
創建視圖
視圖的更新
數據查詢(Select)
數據查詢是數據庫應用的核心功能
Select子句——重複元組
- SQL具有包的特性
- Select 子句的缺省情況是保留重複元組( ALL ),可用 Distinct 去除重複元組
- 去除重複元組:費時
- 需要臨時表的支持
Select子句—— *與屬性列表
- 星號 * 表示所有屬性
- 星號 * :按關係模式中屬性的順序排列
- 顯式列出屬性名:按用戶順序排列
Select子句——更名
- 爲結果集中的某個屬性改名
- 使結果集更具可讀性
Where 子句
- 查詢滿足指定條件的元組可以通過Where子句來實現
- 使where子句中的邏輯表達式返回True值的元組,是符合要求的元組,將被選擇出來
- Where 子句——運算符
- 比較:<、<=、>、>=、=、<> 等
- 確定範圍:
- Between A and B、Not Between A and B
- 確定集合:IN、NOT IN
- 字符匹配:LIKE,NOT LIKE
- 空值:IS NULL、IS NOT NULL
- 多重條件:AND、OR、NOT
- Where 子句——Like
- 字符匹配:Like、Not Like
- 通配符
- % —— 匹配任意字符串
- _ —— 匹配任意一個字符
- 大小寫敏感
- Where 子句——轉義符 escape
From 子句
- 列出將被查詢的關係(表)
- From 子句——元組變量
- 爲 From 子句中的關係定義元組變量
- 方便關係名的引用
- 連接子句
- 內連接
- 內連接是指包括符合條件的每個表的記錄,也稱之爲全記錄操作。
- 外連接
- 外連接是指把兩個表分爲左右兩個表。右外連接是指連接滿足條件右側表的全部記錄。左外連接是指連接滿足條件左側表的全部記錄。全外連接是指連接滿足條件表的全部記錄。
- 左外連接
- 右外連接
- 全外連接
- 內連接
Order By子句
- 指定結果集中元組的排列次序
- 耗時
- ASC升序(缺省)、DESC降序
子查詢(Subquery )
-
子查詢是嵌套在另一查詢中的 Select-From-Where 表達式(Where/Having)
-
SQL允許多層嵌套,由內而外地進行分析,子查詢的結果作爲父查詢的查找條件
-
可以用多個簡單查詢來構成複雜查詢,以增強SQL的查詢能力
-
子查詢中不使用 Order By 子句,Order By子句只能對最終查詢結果進行排序
-
子查詢——單值比較
- 返回單值的子查詢,只返回一行一列
- 父查詢與單值子查詢之間用比較運算符進行連接
- 運算符:>、>=、=、<=、<、 <>
-
子查詢——多值
-
子查詢返回多行一列
-
運算符:In、All、Some(或Any)、Exists
-
子查詢——多值成員In
- 若值與子查詢返回集中的某一個相等,則返回true
- IN 被用來測試多值中的成員
- 若值與子查詢返回集中的某一個相等,則返回true
-
子查詢——多值比較 ALL
-
父查詢與多值子查詢之間的比較用All來連接
-
值s比子查詢返回集R中的每個都大時,s>All R 爲True
-
All表示所有
-
all、< all、<=all、>=all、<> all
-
<> all 等價於 not in
-
-
子查詢——多值比較Some/Any
-
父查詢與多值子查詢之間的比較需用Some/Any來連接
-
值s比子查詢返回集R中的某一個都大時返回 Ture
- s > Some R爲True 或
- s > Any R爲True
-
Some(早期用Any)表示某一個(任意一個)
-
some、< some、<=some、>=some、<> some
-
= some 等價於 in、<> some 不等價於 not in
-
-
-
-
子查詢——存在判斷Exists
- Exists + 子查詢用來判斷該子查詢是否返回元組
- 當子查詢的結果集非空時,Exists爲True
- 當子查詢的結果集爲空時,Exists爲False
- 不關心子查詢的具體內容,因此用 Select *
- 具有外部引用的子查詢,稱爲相關子查詢(Correlated Queries)
- 外層元組的屬性作爲內層子查詢的條件
聚合函數
- 把一列中的值進行聚合運算,返回單值的函數
- 五個預定義的聚合函數
- 平均值:Avg( )
- 總和: Sum( )
- 最小值:Min( )
- 最大值:Max( )
- 計數: Count( ) 返回所選列中不爲NULL的數
- Group By
- 將查詢結果集按某一列或多列的值分組,值相等的爲一組,一個分組以一個元組的形式出現
- 只有出現在Group By子句中的屬性,纔可出現在Select子句中
- Having
- 針對聚合函數的結果值進行篩選(選擇),它作用於分組計算結果集
- 跟在Group By子句的後面。
- Having 與 Where的區別
- Where 決定哪些元組被選擇參加運算,作用於關係中的元組
- Having 決定哪些分組符合要求,作用於分組
- 聚合函數的條件關係必須用Having,Where中不應出現聚合函數
- 聚合函數對Null的處理
- Count:不計
- Sum:不將其計入
- Avg:具有 Null 的元組不參與
- Max / Min:不參與
索引
數據庫中的索引與書籍中的索引類似,在一本書中,利用索引可以快速查找所需信息,無須閱讀整本書。在數據庫中,索引使數據庫程序無須對整個表進行掃描,就可以在其中找到所需數據。書中的索引是一個詞語列表,其中註明了包含各個詞的頁碼。而數據庫中的索引是某個表中一列或者若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單
索引的作用
- 通過創建唯一索引,可以保證數據記錄的唯一性。
- 可以大大加快數據檢索速度。
- 可以加速表與表之間的連接,這一點在實現數據的參照完整性方面有特別的意義。
- 在使用ORDER BY和GROUP BY子句中進行檢索數據時,可以顯著減少查詢中分組和排序的時間。
- 使用索引可以在檢索數據的過程中使用優化隱藏器,提高系統性能
聚集索引與非聚集索引
- 聚集索引對錶的物理數據頁中的數據按列進行排序,然後再重新存儲到磁盤上,即聚集索引與數據是混爲一體的,它的葉節點中存儲的是實際的數據
- 非聚集索引具有完全獨立於數據行的結構,使用非聚集索引不用將物理數據頁中的數據按列排序。非聚集索引的葉節點存儲了組成非聚集索引的關鍵字值和行定位器
Transaction_SQL 語句
- 賦權語句——Grant
- 收回權限——Revoke
- 收回權限——Deny
八:數據庫恢復技術
什麼是事務
事務(Transaction)是用戶定義的一個數據庫操作序列,這些操作要麼全做,要麼全不做,是一個不可分割的工作單位
事務和程序是兩個概念
- 在關係數據庫中,一個事務可以是一條SQL語句,一組SQL語句或整個程序
- 一個應用程序通常包含多個事務
事務是恢復和併發控制的基本單位
事務結束
COMMIT
- 事務正常結束
- 提交事務的所有操作(讀+更新)
- 事務中所有對數據庫的更新永久生效
ROLLBACK
- 事務異常終止
- 事務運行的過程中發生了故障,不能繼續執行
- 回滾事務的所有更新操作
- 事務滾回到開始時的狀態
事務的特性(ACID特性)
原子性(Atomicity)
- 事務是數據庫的邏輯工作單位
- 事務中包括的諸操作要麼都做,要麼都不做
一致性(Consistency)
- 事務執行的結果必須是使數據庫從一個 一致性狀態變到另一個一致性狀態
- 一致性狀態:
- 數據庫中只包含成功事務提交的結果
- 不一致狀態:
- 數據庫中包含失敗事務的結果
隔離性(Isolation)
-
對併發執行而言一個事務的執行不能被其他事務干擾
-
一個事務內部的操作及使用的數據對其他併發事務是隔離的
-
併發執行的各個事務之間不能互相干擾
持續性(Durability )
- 持續性也稱永久性(Permanence)
- 一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。
- 接下來的其他操作或故障不應該對其執行結果有任何影響。
常見故障原因
- 計算機硬件故障
- 系統軟件和應用軟件的錯誤
- 操作員的失誤
- 惡意的破壞
故障的影響
- 運行事務非正常中斷
- 破壞數據庫
故障的種類
- 事務故障
- 系統故障
- 介質故障
- 計算機病毒
恢復的實現技術
數據轉儲(backup)
登錄日誌文件(logging)
九:併發控制
多事務執行方式
(1)事務串行執行
- 每個時刻只有一個事務運行,其他事務必須等到這個事務結束以後方能運行
- 不能充分利用系統資源,發揮數據庫共享資源的特點
(2)交叉併發方式(interleaved concurrency)
- 事務的並行執行是這些並行事務的並行操作輪流交叉運行
- 是單處理機系統中的併發方式,能夠減少處理機的空閒時間,提高系統的效率
(3)同時併發方式(simultaneous concurrency)
- 多處理機系統中,每個處理機可以運行一個事務,多個處理機可以同時運行多個事務,實現多個事務真正的並行運行
- 最理想的併發方式,但受制於硬件環境
- 更復雜的併發方式機制
併發操作帶來的數據不一致性
丟失修改(lost update)
- 丟失修改是指事務1與事務2從數據庫中讀入同一數據並修改
- 事務2的提交結果破壞了事務1提交的結果,導致事務1的修改被丟失。
不可重複讀(non-repeatable read)
- 不可重複讀是指事務1讀取數據後,事務2執行更新操作,使事務1無法再現前一次讀取結果。
讀“髒”數據(dirty read)
- 事務1修改某一數據,並將其寫回磁盤
- 事務2讀取同一數據後
- 事務1由於某種原因被撤消,這時事務1已修改過的數據恢復原值
- 事務2讀到的數據就與數據庫中的數據不一致,
- 是不正確的數據,又稱爲“髒”數據。
封鎖
什麼是封鎖
- 封鎖就是事務T在對某個數據對象(例如表、記錄等)操作之前,先向系統發出請求,對其加鎖
- 加鎖後事務T就對該數據對象有了一定的控制,在事務T釋放它的鎖之前,其它的事務不能更新此數據對象。
- 封鎖是實現併發控制的一個非常重要的技術
基本封鎖類型
- 排它鎖(eXclusive lock,簡記爲X鎖)
- 排它鎖又稱爲寫鎖
- 若事務T對數據對象A加上X鎖,則只允許T讀取和修改A,其它任何事務都不能再對A加任何類型的鎖,直到T釋放A上的鎖
- 共享鎖(Share lock,簡記爲S鎖)
- 共享鎖又稱爲讀鎖
- 若事務T對數據對象A加上S鎖,則其它事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖
封鎖協議
1級封鎖協議
- 事務T在修改數據R之前必須先對其加X鎖,直到事務結束才釋放
- 1級封鎖協議可防止丟失修改
- 在1級封鎖協議中,如果是讀數據,不需要加鎖的,所以它不能保證可重複讀和不讀“髒”數據。
- 讀“髒”數據
- 不可重複讀
2級封鎖協議
- 1級封鎖協議+事務T在讀取數據R前必須先加S鎖,讀完後即可釋放S鎖
- 2級封鎖協議可以防止丟失修改和讀“髒”數據。
- 在2級封鎖協議中,由於讀完數據後即可釋放S鎖,所以它不能保證可重複讀。
3級封鎖協議
- 1級封鎖協議 + 事務T在讀取數據R之前必須先對其加S鎖,直到事務結束才釋放
- 3級封鎖協議可防止丟失修改、讀髒數據和不可重複讀。