數(shù)據(jù)庫的三級模式:
- 模式:也稱邏輯模式,是數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是所有的用戶的公共數(shù)據(jù)視圖。
- 外模式:也稱子模式或用戶模式,它是數(shù)據(jù)庫用戶能夠看見和使用的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是數(shù)據(jù)庫用戶的數(shù)據(jù)視圖,是與某一應(yīng)用有關(guān)的數(shù)據(jù)的邏輯表示。
- 內(nèi)模式:也稱存儲模式,一個數(shù)據(jù)庫只有一個內(nèi)模式。它是數(shù)據(jù)物理結(jié)構(gòu)的存儲方式的描述,是數(shù)據(jù)在數(shù)據(jù)庫內(nèi)部的組織方式。
傳統(tǒng)的集合運算是二目運算,包括并、差、交、笛卡爾積4中運算
連接分為3種:內(nèi)連接、自然連接、外連接
- 內(nèi)連接和自然連接的區(qū)別:自然連接必須兩個表進行比較的列必須同名相同屬性,內(nèi)連接則不需要列同名。
- 內(nèi)連接和外連接的區(qū)別:兩種連接取出兩張表中匹配到的數(shù)據(jù),內(nèi)連接匹配不到的不保留;外連接匹配不到的也保留,其值設(shè)置為NULL。
- 外連接分為左外連接和右外連接:
- 左外連接:保存左邊的懸浮元組
- 右外連接:保存右邊的懸浮元組
自然連接
外連接
SQL的數(shù)據(jù)定義
操作對象 創(chuàng)建 刪除 修改 模式 CREATE SCHEMA DROP SCHEMA 表 CREATE TABLE DROP TABLE ALTER TABLE 視圖 CREATE VIEW DROP VIEW 索引 CREATE INDEX DROP INDEX ALTER INDEX SQL的數(shù)據(jù)定義語句
SQL定義表的基本格式:
CREATE TABLE <表名> (<列名> <數(shù)據(jù)類型> [列級完整性約束條件] ,<列名> <數(shù)據(jù)類型> [列級完整性約束條件] ,<列名> <數(shù)據(jù)類型> [列級完整性約束條件] ,[表級完整性約束條件]);SQL定義表示例:
CREATE TABLE SC (Cno CHAR(9) PRIMARY KEY, Cname CHAR(40) NOT NULL, Cpno CHAR(4), Ccredit INT, FOREIGN KEY (Cpno) REFERENCES Course(Cno) );
索引
當(dāng)數(shù)據(jù)量比較大的時候,查詢比較耗時。簡歷索引是加快查詢速度的有效手段。(類似于圖書后面的索引)
數(shù)據(jù)庫索引類型:
- 順序文件上的索引:是針對按指定屬性值升序或降序存儲的關(guān)系,在該屬性上簡歷一個順序索引文件,索引文件由屬性值和相應(yīng)的元組指針組成。
- B+樹索引:是將索引屬性組織成B+樹的形式,B+樹的葉節(jié)點為屬性值和相應(yīng)的元組指針。B+樹索引具有動態(tài)平衡的優(yōu)點。
- 散列索引:是建立若干個桶,將索引按照其散列函數(shù)值映射到相應(yīng)桶中,桶中存放索引屬性值和相應(yīng)的元組指針。散列索引具有查找速度快的優(yōu)點。
- 位圖索引:是用位向量記錄索引屬性中可能出現(xiàn)的值,每個位向量對應(yīng)一個可能的值。
數(shù)據(jù)查詢
SQL的SELECT語句基本格式:
FROM <表名或試圖名> [,<表名或試圖名>...] | (SELECT語句) AS <別名> [WHERE <條件表達式>] [GROUP BY <列名1> [HAVING <條件表達式>]] [GROUP BY <列名2> [ASC|DESC]];左外連接SQL示例:
SELECT Student.Sno,Sname,Ssex,Sage,Cno FROM Student LEFT OUTER JOIN SC ON (Student.Sno=SC.Sno);GROUP BY子句將查詢結(jié)果按一列或多列的值分組,值相等的為一組。
WHERE和HAVING的區(qū)別:作用對象不同。
- WHERE子句作用于基本表或視圖,從中選擇滿足條件的元組。
- HAVING短語作用于組,從中選擇滿足條件的組。
嵌套查詢示例:
SELECT Sname FROM Student, SC, Course WHERE Student.Sno=SC.Sno=SC.Sno AND SC.Cno=Course.Cno數(shù)據(jù)庫謂詞有:IN 、ANY、SOME、ALL、EXISTS
視圖
視圖是從一個或多個基本表導(dǎo)出的表。是一個虛表。
建立視圖的一般格式:CREATE VIEW <視圖名> [(<列名> [,<列名>] ...)] AS <子查詢> [WITH CHECK OPTION];
SQL四種語言
- DDL(Data Definition Language)數(shù)據(jù)庫定義語言
DDL是SQL語言的四大功能之一。
用于定義數(shù)據(jù)庫的三級結(jié)構(gòu),包括外模式、概念模式、內(nèi)模式及其相互之間的映像,定義數(shù)據(jù)的完整性、>>安全控制等約束
DDL不需要commit.
CREATE、ALTER、DROP、TRUNCATE、COMMENT、RENAME
- DML(Data Manipulation Language)數(shù)據(jù)操縱語言
由DBMS提供,用于讓用戶或程序員使用,實現(xiàn)對數(shù)據(jù)庫中數(shù)據(jù)的操作。
DML分成交互型DML和嵌入型DML兩類。
依據(jù)語言的級別,DML又可分成過程性DML和非過程性DML兩種。
DML需要commit.
SELECT、INSERT、UPDATE、DELETE、MERGE、CALL、EXPLAIN PLAN、LOCK TABLE
- DCL(Data Control Language)數(shù)據(jù)庫控制語言。授權(quán),角色控制等
GRANT 授權(quán)
REVOKE 取消授權(quán)
- TCL(Transaction Control Language)事務(wù)控制語言
SAVEPOINT 設(shè)置保存點
ROLLBACK 回滾
SET TRANSACTION
SQL主要分成四部分:
- 數(shù)據(jù)定義(SQL DDL)用于定義SQL模式、基本表、視圖和索引的創(chuàng)建和撤消操作。
- 數(shù)據(jù)操縱(SQL DML)數(shù)據(jù)操縱分成數(shù)據(jù)查詢和數(shù)據(jù)更新兩類。數(shù)據(jù)更新又分成插入、刪除、和修改三種操作
- 數(shù)據(jù)控制 包括對基本表和視圖的授權(quán),完整性規(guī)則的描述,事務(wù)控制等內(nèi)容。
- 嵌入式SQL的使用規(guī)定 涉及到SQL語句嵌入在宿主語言程序中使用的規(guī)則。
參照完整性策略
- 拒絕(NO ACTION)執(zhí)行
- 級聯(lián)(CASCADE)操作
- 設(shè)置為空值
數(shù)據(jù)庫存取方式
存取方式是快速存取數(shù)據(jù)庫中數(shù)據(jù)的方式,常用的存取方法為索引方法和聚簇方法
B+樹索引和hash索引是數(shù)據(jù)庫中經(jīng)典的存取方法,使用最普遍。
實現(xiàn)查詢操作的算法示例
選擇操作的實現(xiàn):
- 簡單地全表掃描算法
- 索引掃描算法
連接操作的實現(xiàn):
- 嵌套循環(huán)算法
- 排序-合并算法
- 索引連接算法
- hash join算法
事務(wù)
事務(wù)概念:事務(wù)是一系列的數(shù)據(jù)庫操作,是數(shù)據(jù)庫應(yīng)用程序的基本邏輯單元。
事務(wù)的ACID特性:
- 原子性(Atomicity):事務(wù)是數(shù)據(jù)庫的邏輯工作單位,事務(wù)中包括的操作要么都做要么都不做。
- 一致性(Consistency):事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)。例如某公司有A,B兩個賬戶,A取出一萬元存入B賬戶。那么可以定義為一個事務(wù),該事務(wù)包括兩個操作,這兩個操作要么全做,要么全不做,否則就會破壞一致性。
- 隔離性(Isolation):一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾。即一個事務(wù)的內(nèi)部操作及使用的數(shù)據(jù)對其他并發(fā)事務(wù)是隔離的,并發(fā)執(zhí)行的各個事務(wù)之間不能相互干擾。即要達到這么一種效果:對于任意兩個并發(fā)的事務(wù)T1和T2,在事務(wù)T1看來,T2要么在T1開始之前就已經(jīng)結(jié)束,要么在T1結(jié)束之后才開始,這樣每個事務(wù)都感覺不到有其他事務(wù)在并發(fā)地執(zhí)行。
- 持續(xù)性(Durability):也叫永久性。指的是一個事務(wù)一旦提交,對數(shù)據(jù)庫的數(shù)據(jù)的改變就是永久性的,接下來的其他操作或故障不應(yīng)該對其執(zhí)行結(jié)果有影響。
在不考慮事務(wù)的隔離性時,并發(fā)操作會帶來的數(shù)據(jù)的不一致性:
- 臟讀:臟讀是指在一個事務(wù)處理過程里讀取了另一個未提交的事務(wù)中的數(shù)據(jù)。當(dāng)一個事務(wù)正在多次修改某個數(shù)據(jù),而在這個事務(wù)中這多次的修改都還未提交,這時一個并發(fā)的事務(wù)來訪問該數(shù)據(jù),就會造成兩個事務(wù)得到的數(shù)據(jù)不一致。
- 不可重復(fù)讀:不可重復(fù)讀是指在對于數(shù)據(jù)庫中的某個數(shù)據(jù),一個事務(wù)范圍內(nèi)多次查詢卻返回了不同的數(shù)據(jù)值,這是由于在查詢間隔,被另一個事務(wù)修改并提交了。
例如事務(wù)T1在讀取某一數(shù)據(jù),而事務(wù)T2立馬修改了這個數(shù)據(jù)并且提交事務(wù)給數(shù)據(jù)庫,事務(wù)T1再次讀取該數(shù)據(jù)就得到了不同的結(jié)果,發(fā)送了不可重復(fù)讀。
不可重復(fù)讀和臟讀的區(qū)別是,臟讀是某一事務(wù)讀取了另一個事務(wù)未提交的臟數(shù)據(jù),而不可重復(fù)讀則是讀取了前一事務(wù)提交的數(shù)據(jù)。

