關系數據庫系統系統支持三級模式結構,其模式,外模式和內模式中的基本對象有模式,表,視圖和索引等。因此SQL的數據定義功能包括模式定義,表定義,視圖和索引的定義。
一個數據庫管理系統中可以建立多個數據庫,一個數據庫可以建立多個模式,一個模式下有多個表,視圖和索引等。
(一) 模式
1.定義模式:
CREATE SCHEMA <模式名> AUTHORIZATION <用戶名>;
//當模式名為空時,默認為用戶名
例:為用戶SONG創建一個模式TEST。
CREATE SCHEMA TEST AUTHORIZATION SONG;
在CREATE SCHEMA 中可以接受CREATE TABLE ,CREATE VIEW和GRANT子句。
CREATE SCHEMA <模式名> SUTHORIZATION<用戶名> [<表定義子句>|<視圖定義子句>|<授權定義子句>];
例:為用戶ZHANG創建一個模式TEST,並且在其中定義一個表TAB1。
CREATE SCHEMA TEST AUTHORIZATION ZHANG;
CREATE TABLE TAB1( COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20)
);
2.刪除模式:
DROP SCHEMA <模式名> <CASCADE | RESTRICT>;
其中CASCDE(級聯)表示在刪除模式的同時把該模式中所有的數據庫對象全部刪除;RESTRICT(限制)表示如果該模式已經定義了下屬的數據庫對象(如表,視圖等)則拒絕該刪除語句的執行。
(二)基本表
1.定義基本表:
CREATE<表名>(<列名><數據類型>[列級完整性約束條件]
[,<列名><數據類型>[列級完整性約束條件]]
...
[,<表級完整性約束條件>]);
例:建立一個Student表。
CREATE TABLE Student
(Sno CHAR(9)PRIMARY KEY, /*Sno是主碼*/
Sname CHAR(20)UNIQUE. /*Sname取唯一值*/
Ssex CHAR(2),
Sdept CHAR(20)
Sage SMALLINT
);
2.刪除基本表:
DROP TABLE <表名> [RESTRICT | CASCADE]
若選擇RESTRICT,則該表的刪除是有限制的,欲刪除的表不能被其他表的約束所引用,不能有視圖,觸發器,存儲過程或函數;若選擇CASCADE,則該表的刪除沒有限制條件,相關內容一起刪除。
3.修改基本表:
ALTER TABLE <表名>
[ ADD[COLUMN] <新列名> <數據類型> [ 完整性約束 ] ]
[ ADD <表級完整性約束>]
[ DROP [ COLUMN ] <列名> [CASCADE| RESTRICT] ]
[ DROP CONSTRAINT<完整性約束名>[ RESTRICT | CASCADE ] ]
[ALTER COLUMN <列名><數據類型> ] ;
ADD子句用於增加新列、新的列級完整性約束條件和新的表級完整性約束條件;DROP COLUMN子句用於刪除表中的列;DROP CONSTRAINT子句用於刪除指定的完整性約束條件。
例:向Student表增加“入學時間”列,其數據類型為日期型。
ALTER TABLE Student ADD S_entrance DATE;
例:將年齡的數據類型由字符型(假設原來的數據類型是字符型)改為整數。
ALTER TABLE Student ALTER COLUMN Sage INT;
例:增加課程名稱必須取唯一值的約束條件。
ALTER TABLE Course ADD UNIQUE(Cname);
(三)索引
1.索引的建立:
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
<表名>:要建索引的基本表的名字
<次序>:指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC
UNIQUE:此索引的每一個索引值只對應唯一的數據記錄
CLUSTER:表示要建立的索引是聚簇索引
2.索引的修改:
ALTER INDEX <舊索引名> RENAME TO <新索引名>
例:將SC表的SCno索引名改為SCSno。
ALTER INDEX SCno RENAME TO SCSno;
3.索引的刪除:
DROP INDEX <索引名>;
例:刪除Student表的Stusname索引。
DROP INDEX Stusname;