学习目标:
1、模式的定义与删除
2、 基本表的定义、删除与修改
3、 数据类型
4、索引的建立与删除
5、 数据字典
学习内容:
1、模式的定义与删除
定义模式
--[例3.1]定义一个学生-课程模式S-T
create schema "S-T" authorization test;
/*为用户test定义了一个模式S-T*/
--如果没有指定<模式名>,那么<模式名>隐含为<用户名>
定义模式实际上定义了一个命名空间。
在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。
在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句,故可在创建模式的同时创建表、视图等。
--[例3.3]为用户ZHANG创建了一个模式TEST,并且在其中定义一个表TAB1
CREATE SCHEMA AAA AUTHORIZATION test
CREATE TABLE TAB1 ( COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
);
删除模式
DROP SCHEMA <模式名> <CASCADE|RESTRICT>
CASCADE(级联): 删除模式的同时把该模式中所有的数据库对象全部删除
RESTRICT(限制): 如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。当该模式中没有任何下属的对象时才能执行
--[例3.4]
DROP SCHEMA s1 CASCADE;
/*删除模式ZHANG,同时该模式中定义的表TAB1也被删除*/
2、 基本表的定义、删除与修改
定义基本表
--[例3.5] 建立“学生”表Student。学号是主码,姓名取值唯一
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY, /* 列级完整性约束条件,Sno是主码*/
Sname CHAR(20) UNIQUE, /* Sname取唯一值*/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
-- [例3.6 ] 建立一个“课程”表Course
CREATE TABLE Course
(Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
);
--[例3.7] 建立一个“学生选课”表SC
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY (Sno,Cno),
/* 主码由两个属性构成,必须作为表级完整性进行定义*/
FOREIGN KEY (Sno) REFERENCES Student(Sno),
/* 表级完整性约束条件,Sno是外码,被参照表是Student */
FOREIGN KEY (Cno) REFERENCES Course(Cno)
/* 表级完整性约束条件, Cno是外码,被参照表是Course*/
);
修改基本表
ALTER TABLE <表名>
[ ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]
[ ADD <表级完整性约束>]
[ DROP [ COLUMN ] <列名> [CASCADE| RESTRICT] ]
[ DROP CONSTRAINT<完整性约束名>[ RESTRICT | CASCADE ] ]
[ALTER COLUMN <列名><数据类型> ] ;
--[例3.8] 向Student表增加“入学时间”列,其数据类型为日期型
ALTER TABLE Student ADD S_entrance DATE;
/*不管基本表中原来是否已有数据,新增加的列一律为空值 */
--[例3.9] 将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。
ALTER TABLE Student ALTER COLUMN Sage INT;
--[例3.10] 增加课程名称必须取唯一值的约束条件。
ALTER TABLE Course ADD UNIQUE(Cname);
删除基本表
DROP TABLE <表名>[RESTRICT| CASCADE];
RESTRICT:删除表是有限制的。
欲删除的基本表不能被其他表的约束所引用
如果存在依赖该表的对象,则此表不能被删除
CASCADE:删除该表没有限制。
在删除基本表的同时,相关的依赖对象一起删除
--[例3.11] 删除Student表
DROP TABLE Student CASCADE ;
/*基本表定义被删除,数据被删除
表上建立的索引、视图、触发器等一般也将被删除 */
3、数据类型
字符数据类型
精确数值数据类型
近似数值数据类型
二进制数据类型
日期和时间数据类型
4、 索引的建立与删除
索引建立的目的:加快查询的速度
关系数据库管理系统中常见索引:
- 顺序文件上的索引
- B+树索引
- 散列(hash)索引
- 位图索引
特点:
B+树索引具有动态平衡的优点
HASH索引具有查找速度快的特点
建立索引
CREATE [UNIQUE] [CLUSTERED] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
<表名>:要建索引的基本表的名字
索引:可以建立在该表的一列或多列上,各列名之间用逗号分隔
<次序>:指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC
UNIQUE:此索引的每一个索引值只对应唯一的数据记录
CLUSTERED:表示要建立的索引是聚簇索引
--[例3.13] 在Student表的Sname(姓名)列上建立一个聚簇索引
CREATE CLUSTERED INDEX Stusname
ON Student(Sname);
*在最经常查询的列上建立聚簇索引以提高查询效率
一个基本表上最多只能建立一个聚簇索引
经常更新的列不宜建立聚簇索引 *
--[例3.14]为学生-课程数据库中的Student,Course,SC三个表建 立索引。
--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);
删除索引
DROP INDEX <索引名>;
删除索引时,系统会从数据字典中删去有关该索
引的描述。
--[例3.15] 删除Student表的Stusname索引
DROP INDEX Stusname on student;
5、 数据字典
数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有定义信息:
- 关系模式定义
- 视图定义
- 索引定义
- 完整性约束定义
- 各类用户对数据库的操作权限
- 统计信息等
关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息。