ALTER TABLE <表名>
[ ADD <新列名> <數據類型> [ 完整性約束 ] ]
[ DROP <完整性約束名> ]
[ ALTER COLUMN<列名> <數據類型> ];
[例8]向Student表增加“入學時間”列,其數據類型為日期型。
ALTER TABLE Student ADD S_entrance DATE;
不論基本表中原來是否已有數據,新增加的列一律為空值。
[例9]將年齡的數據類型由字符型(假設原來的數據類型是字符型)改為整數。
ALTER TABLE Student ALTER COLUMN Sage INT;
[例10]增加課程名稱必須取唯一值的約束條件。
ALTER TABLE Course ADD UNIQUE(Cname);
DROP TABLE <表名>[RESTRICT| CASCADE];
RESTRICT:刪除表是有限制的。
欲刪除的基本表不能被其他表的約束所引用
如果存在依賴該表的對象,則此表不能被刪除
CASCADE:刪除該表沒有限制。
在刪除基本表的同時,相關的依賴對象一起刪除
[例11] 刪除Student表
DROP TABLE Student CASCADE ;
基本表定義被刪除,數據被刪除
表上建立的索引、視圖、觸發器等一般也將被刪除
[例12]若表上建有視圖,選擇RESTRICT時表不能刪除
CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS';
DROP TABLE Student RESTRICT;
--ERROR: cannot drop table Student because other
objects depend on it
[例12]如果選擇CASCADE時可以刪除表,視圖也自動被刪除
DROP TABLE Student CASCADE;
--NOTICE: drop cascades to view IS_Student
SELECT * FROM IS_Student;
--ERROR: relation " IS_Student " does not exist
建立索引的目的:加快查詢速度
誰可以建立索引
DBA 或 表的屬主(即建立表的人)
DBMS一般會自動建立以下列上的索引
PRIMARY KEY
UNIQUE
誰 維護索引
DBMS自動完成
使用索引
DBMS自動選擇是否使用索引以及使用哪些索引
RDBMS中索引一般采用B+樹、HASH索引來實現
B+樹索引具有動態平衡的優點
HASH索引具有查找速度快的特點
采用B+樹,還是HASH索引 則由具體的RDBMS來決定
索引是關系數據庫的內部實現技術,屬於內模式的范疇
CREATE INDEX語句定義索引時,可以定義索引是唯一索引、非唯一索引或聚簇索引
語句格式
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
[例13] CREATE CLUSTER INDEX Stusname
ON Student(Sname);
在Student表的Sname(姓名)列上建立一個聚簇索引
在最經常查詢的列上建立聚簇索引以提高查詢效率
一個基本表上最多只能建立一個聚簇索引
經常更新的列不宜建立聚簇索引
[例14]為學生-課程數據庫中的Student,Course,SC三個表建 立索引。
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
Student表按學號升序建唯一索引
Course表按課程號升序建唯一索引
SC表按學號升序和課程號降序建唯一索引
DROP INDEX <索引名>;
刪除索引時,系統會從數據字典中刪去有關該索引的
描述。
[例15] 刪除Student表的Stusname索引
DROP INDEX Stusname;