数据库概论----SQL数据定义
关系数据库系统系统支持三级模式结构,其模式,外模式和内模式中的基本对象有模式,表,视图和索引等。因此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;