《數據庫系統概論》 -- 3.1SQL概論和DDL
3.1 SQL特點
綜合統一
集數據定義語言、數據操縱語言、數據控制語言的功能於一體,語言風格統一,可以獨立完成數據庫生命周期中的全部活動
關系模型中實體和實體間的聯系均用關系表示,數據結構的單一性帶來了數據操作符的統一性
高度非過程化
存取路徑的選擇以及SQL的操作過程由系統自動完成,提高了數據獨立性
面向集合的操作方式
relation-at-a-time
以同一種語法結構提供多種使用方式
獨立的語言:可以直接命令行鍵入SQL命令操作
嵌入式語言:也可以嵌入到高級語言(C、C++、JAVA)程序中
語言簡潔,易學易用
核心功能只用9個動詞
SQL功能 動詞
數據查詢 SELECT
數據定義 CREATE, DROP, ALTER
數據操縱 INSERT, UPDATE, DELETE
數據控制 GRANT, REVOKE
3.2 SQL基本概念
基本表:本身獨立存在的表,一個關系對應一個基本表,一個或多個基本表對應一個存儲文件
索引:一個表可以帶若幹索引,索引也存放在存儲文件中
視圖:從一個或幾個基本表到處的表,數據庫中存放視圖的定義而不存放視圖對應的數據
3.3 數據定義
操作對象 操作方式
創建 刪除 修改
模式 CREATE SCHEMA DROP SCHEMA
表 CREATE TABLE DROP TABLE ALTER TABLE
視圖 CREATE VIEW DROP VIEW
索引 CREATE INDEX DROP INDEX ALTER INDEX
模式創建
格式 CREATE SCHEMA [<模式名>] AUTHORIZATION <用戶名> [<表定義子句>|<視圖定義子句>|<授權定義子句>]
說明 創建模式實際上定義了一個命名空間,在這個空間中可以進一步定義該模式包含的數據庫對象;
<模式名>省略時缺省與<用戶名>保持一致;
可以在創建模式同時創建表、視圖,或授權
舉例 為用戶WANG定義一個學生-課程模式S-T
CREATE SCHEMA S-T AUTHORIZATION WANG;
為用戶ZHANG創建一個TEST模式,並在其中定義一個表TAB1
CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE TAB1(COL1 SMALLLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
);
註:附錄--01.schema和database的區別
模式刪除
格式 DROP SCHEMA <模式名> <CASCADE|RESTRICT>;
說明 CASCADE:級聯,在刪除模式時,刪除該模式中的所有數據庫對象
RESTRICT:限制,在刪除模式時,如果模式中已經定義了數據庫對象,則拒絕該刪除語句的執行
舉例 級聯刪除TEST模式
DROP SCHEMA TEST CASCADE;
基本表創建
格式 CREATE TABLE <表名> (<列名> <數據類型> [列級完整性約束條件]
[,<列名> <數據類型> [列級完整性約束條件]...]
[,<表級完整性約束條件>...]);
說明 如果完整性約束條件涉及該表的多個屬性列,則必須定義在表級上;
否則即可以定義在列級,也可以定義在表級
主碼有多個屬性構成,必須寫到表級完整性約束處
舉例 CREATE TABLE Student (
Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
被參照表和參照表可以是同一個表
CREATE TABLE Course (
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40) NOT NULL,
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
);
註:附錄--02.數據類型、03.模式與表
修改基本表
格式 ALTER TABLE <表名>
[RENAME <新表名>]
[ADD [COLUMN] <新列名> <新數據類型> [<新列級完整性約束>]]
[ADD <新表級完整性約束>]
[DROP [COLUMN] <列名> [CASCADE|RESTRICT]]
[DROP CONSTRAINT <完整性約束名> [RESTRICT|CASCADE]]
[ALTER COLUMN <列名> [(<新列名> <新數據類型>) | <新數據類型>]];
說明 RENAME--修改表名
ADD--增加新列、新的列級完整性約束條件、新的表級完整性約束條件
DROP--刪除表中的列、指定的完整性約束條件
ALTER COLUMN--修改原有的列定義(列名、數據類型)
舉例 向Student表增加“入學時間”列,數據類型為日期型
ALTER TABLE Student ADD Sentrance DATE;
將Student表中年齡的數據類型由字符型改為整數型
ALTER TABLE Student ALTER COLUMN Sage INT;
增加Course表中課程名稱必須唯一的約束條件
ALTER TABLE Course ADD UNIQUE(Cname);
刪除基本表
格式 DROP TABLE <表名> [RESTRICT|CASCADE];
說明 如果選擇為RESTRICT,則表不能被其他表的約束引用(如CHECK、FOREIGN KEY),不能索引,不能有視圖,不能有觸發器(trigger),不能有存儲過程或函數;
不同RDBMS對於RESTRICT和CASCADE的處理不同,需參考用戶手冊
建立索引
格式 CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名> [<次序>] [, <列名> [<次序>]] ...);
說明 UNIQUE--此索引的每一個索引值只對應唯一的數據記錄
CLUSTER--要建立的索引時聚簇索引???
索引可以建在該表的一列或多列上,每個列名後面可以用<次序>指定所引致的排列次序,ASC-升序(默認),DESC-降序
舉例 為Student表按照學號升序建立唯一索引
CREATE UNIQUE INDEX Stusno ON Student(Sno);
為Course表按照課程號升序建立唯一索引
CREATE UNIQUE INDEX Coucno ON Course(Cno);
為SC表按照學號升序,課程號降序建立唯一索引
CREATE UNIQUE SCno ON SC(Sno, Cno DESC);
註:附錄--04.索引理解、05.數據字典
修改索引
格式 ALTER INDEX <舊索引名> RENAME TO <新索引名>;
刪除索引
格式 DROP INDEX <索引名>;
說明 刪除索引時,會同時從數據字典中刪去有關該索引的描述
附:
01.schema和database的區別
schema是一個名字空間,創建在某個database下的;一個database下可以包含多個schema。
schema的好處有三點:
1.多個用戶使用同一個數據庫而不會相互影響。
2.對數據庫中的對象進行邏輯分組,更便於管理。
3.各個應用分別使用各自的模式,以避免命名沖突。
各個數據庫產品的database和schema定義不盡相同,需具體情況具體分析
02.數據類型(不同關系數據庫管理系統的數據類型不盡相同)
數據類型 含義
CHAR(n)/ 同CHARACTER(n)
CHARACTER(n) 長度為n的定長字符串
VARCHAR(n)/ 同CHARACTERVARYING(n)
CHARACTERVARYING(n) 最大長度為n的變長字符串
CLOB 字符串大對象
BLOB 二進制大對象
INT/ 同INTEGER
INTEGER 長整數(4字節)
SMALLINT 短整數(2字節)
BIGINT 大整數(8字節)
NUMERIC(p,d) 定點數,小數點前有p位(不包括小數點、符號),小數點後有d位
DECIMAL(p,d)/ 同DEC(p,d)
DEC(p,d) 同NUMERIC
REAL 取決於機器精度的單精度浮點數
DOUBLE PERCISION 取決於機器精度的雙精度浮點數
FLOAT(n) 可選精度的浮點數,精度至少為n位數字
BOOLEAN 邏輯布爾值
DATE 日期,包含年、月、日,格式為YYYY-MM-DD
TIME 時間,包含時、分、秒,格式為HH:MM:SS
TIMESTAMP 時間戳類型
INTERVAL 時間間隔類型
03.模式與表
每一個基本表都屬於某一個模式,當定義基本表時有三個方法定義它所屬的模式
CREATE TABLE "S-T".Student(...);
創建模式同時創建表
設置所屬的模式
1.創建數據庫對象時沒有指定所屬模式,會根據搜索路徑來確定該對象所屬的模式;
2.搜索路徑包含一組模式列表,第一個存在的模式會被用來作為數據庫對象所屬模式;
3.通過show search_path;查看當前搜索路徑;
4.DBA可通過SET search_path TO "S-T", PUBLIC;設置當前搜索路徑
04.索引理解
用戶可以根據應用環境的需要在基本表上建立一個或多個索引,以提供多種存儲路徑,加快查找速度
索引分類
順序文件上的索引:
針對按指定屬性值升序或降序存儲的關系,在該屬性上建立一個順序索引文件
索引文件由屬性值和相應的元組指針組成。
B+樹索引:
將索引屬性組織成B+樹的形式,
B+樹的葉節點為屬性值和相應的元組指針。
優點:動態平衡
散列索引:
建立若幹個桶,將索引屬性按照其散列函數值映射到相應桶中
桶中存放索引屬性值和相應的元組指針
優點:查找速度快
位圖索引:
用位向量記錄索引屬性中可能出現的值,每個位向量對應一個可能值
不同RDBMS支持的索引類型不同。
索引應該由DBA或表的owner來創建和維護。
用戶不能顯示選擇索引。索引是RDBMS的內部實現技術,屬於內模式。
05.數據字典
數據字典是RDBMS內部的一組系統表
記錄了數據庫中所有定義信息,包括關系模式定義、視圖定義、索引定義、完整性約束定義、各類用戶對數據庫的操作權限、一些統計信息等
執行DDL,實際就是更新數據字典表中的對應信息
根據數據字典中的信息進行查詢優化和查詢處理
《數據庫系統概論》 -- 3.1SQL概論和DDL