1. 程式人生 > >SQL語句整理(二) 數據定義語言DDL

SQL語句整理(二) 數據定義語言DDL

組成 reat 知識 必須 操作 刪除 let 字段 str

前言:

這是我學數據庫時整理的學習資料,基本上包括了所以的SQL語句的知識點。

我的教材是人大王珊老師的《數據庫系統概論》。

因為是手打的,所以會用一些細節打錯了,但都挺明顯也不多(考完試後我也沒有心情繼續整理了)。

希望能對大家有幫助。

1. 模式 SCHEMA

CREATE SCEMA <模式名> AUTHORIZATION <用戶名>;

eg:

CREATE SCEMA"S-T" AUTHORIZATION WANG;

Note:

用戶可以在定義模式的同時創建基本表、視圖,定義授權:

CREATE SCHEMA<模式名> AUTHORIZATION <用戶名> [<表定義子句>|

<視圖定義子句>|<授權定義子句>];

eg:

CREATE SCHEMA TEST AUTHORIZATION ZHANG

CREATE TABLE TAB1

( COL1 SMALLINT,

COL2 INT,

COL3 CHAR(20),

COL4 NUMERIC(10,3),

COL5 DECIMAL(5,2)

);

DROP SCHEMA <模式名> <CASCADE|RESTRICT>;

eg:

DROP SCHEMA ZHANG CASCADE;

Note:

CASCADE --> 級聯 --> 連帶將模式中的數據庫對象都刪除

RESTRICT -> 限制 --> 有下屬數據庫對象時,不刪除

2. 表 TABLE

CREATE TABLE <表名> (<列名> <數據類型> [列級完整性約束條件]

       [,<列名> <數據類型> [列級完整性約束條件]

       ...

       [,<表級約束條件

>]);

eg:

CREATE TABLE Course

( Cno CHAR(4) PRIMARY KEY,

Cname CHAR(20) UNIQUE,

Cpno CHAR(4),

Ccredit SMALLINT,

FOREIGN KEY (Cpn) REFERENCES Course(Cno)

);

Note:

1.PRIMARY KEY (Sno,Cno)

2.UNIQUE(Cname)

3.“主碼”同時也可以是“外碼”

4.“數據類型”見 P83

5.定義“表”所屬“模式”:

顯示給出模式名:

CREATE TABLE "S-T".Student(...);

顯示當前搜索路徑:

SHOW searched_path;

默認值:$user,PUBLIC

數據庫管理員設置搜索路徑:

SET searched_path TO "S-T",PUBLIC;

DROP TABLE <表名> <CASCADE|RESTRICT>;

Note:
1.CASCADE --> 級聯 --> 連帶將模式中的數據庫對象都刪除
RESTRICT -> 限制 --> 有下屬數據庫對象時,不刪除
2.默認:RESTRICT

ALTER TABLE <表名>
[ ADD [COLUMN] <新列名> <數據類型> [完整性約束] ]
[ ADD <表級完整性約束> ]
[ DROP [COLUMN] <列明> <CASCADE|RESTRICT> ]
[ DROP CONSTRAINR <完整性約束名> [RESTRICT|CASCADE] ]
[ ALTER COLUMN <列名> <數據類型> ];

Note:
DROP [COLUMN] <列名> <CASCADE|RESTRICT> 中:
CASCADE --> 自動刪除引用了該列的其它對象,如視圖
RESTRICT -> 如果該列被其它對象引用,則不刪除

3. 視圖 VIEW

CREATE VIEW <視圖名> [<列名>[,<列名>]...]
AS
<子查詢>
[ WITH CHECK OPTION ];

eg:

CREATE VIEW IS_S1(Sno,Sname,Grade)

AS

SELECT Student.Sno,Sname,Grade

FROM Student.SC

WHERE Sdept=‘IS‘

AND Student.Sno=SC.sno

AND SC.Cno=‘1‘;

Note:

1.WITH CHECK OPTION --> 對視圖進行數據操縱(UPDATE、INSERT、DELETE)

操作時要保證更新、插入、刪除的行滿足視圖定義中<子查詢>表達式

2.屬性列名要麽全指定,要麽全省略

省略時默認由<子查詢>中各個列的諸字段組成

以下3種情況必須顯示指出視圖的所有列名:

1) <子查詢>中對應的列名是聚集函數或列表達式

2) 多表連接時,選出的視圖字段在多個表中是同名字段

3) 需要在視圖中為該列啟用新的名字

DROP VIEW <視圖名> [CASCADE];

eg:

DROP VIEW IS_S1 CASCADE;

Note:

CASCADE --> 級聯 --> 將由該視圖導出的所有視圖都刪除

SQL語句整理(二) 數據定義語言DDL