王珊《数据库系统概论》(第4版)【教材精讲+考研真题解析】讲义与视频课程【28小时高清视频】
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.3 数据定义

视频二维码(扫码观看)

SQL的数据定义功能:模式定义、表定义、视图和索引的定义。

3.3.1 模式的定义与删除

一、定义模式

【例1】定义一个学生-课程模式S-T

CREATE SCHEMA“S-T”AUTHORIZATION WANG;

为用户WANG定义了一个模式S-T

【例2】CREATE SCHEMA AUTHORIZATION WANG;

<模式名>隐含为用户名WANG

·如果没有指定<模式名>,那么<模式名>隐含为<用户名>。

◆定义模式实际上定义了一个命名空间。

◆在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。

◆在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。

CREATE SCHEMA<模式名>AUTHORIZATION<用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>];

【例3】

为用户ZHANG创建了一个模式TEST,并在其中定义了一个表TAB1。

二、删除模式

◆DROP SCHEMA <模式名>

<CASCADE|RESTRICT>

CASCADE(级联)

删除模式的同时把该模式中所有的数据库对象全部删除。

RESTRICT(限制)

如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。

当该模式中没有任何下属的对象时才能执行。

【例4】DROP SCHEMA ZHANG CASCADE;

删除模式ZHANG,同时该模式中定义的表TAB1也被删除。

3.3.2 基本表的定义、删除与修改

一、定义基本表

如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。

1学生表Student

【例5】建立“学生”表Student,学号是主码,姓名取值惟一

2课程表Course

【例6】建立一个“课程”表Course

3学生选课表SC

【例7】建立一个“学生选课”表SC

二、数据类型

◆SQL中域的概念用数据类型来实现

◆定义表的属性时需要指明其数据类型及长度

◆选用哪种数据类型

·取值范围

·要做哪些运算

表3-2 数据类型及含义

三、模式与表

◆每一个基本表都属于某一个模式

◆一个模式包含多个基本表

◆定义基本表所属模式

·方法一:在表名中明显地给出模式名

·方法二:在创建模式语句中同时创建表

·方法三:设置所属的模式

◆创建基本表(其他数据库对象也一样)时,若没有指定模式,系统根据搜索路径来确定该对象所属的模式。

◆RDBMS会使用模式列表中第一个存在的模式作为数据库对象的模式名。

◆若搜索路径中的模式名都不存在,系统将给出错误。

◆显示当前的搜索路径:

SHOW search_path;

◆搜索路径的当前默认值是:

$user,PUBLIC;

◆DBA用户可以设置搜索路径,然后定义基本表

SET search_path TO “S-T” PUBLIC;

Create table Student(……);

结果建立了S-T.Student基本表。

RDBMS发现搜索路径中第一个模式名S-T存在,就把该模式作为基本表Student所属的模式。

四、修改基本表

【例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时表不能删除

【例13】如果选择CASCADE时可以删除表,视图也自动被删除

表3-3 DROP TABLE时,SQL99与3个RDBMS的处理策略比较

3.3.3 索引的建立与删除

◆建立索引的目的:加快查询速度。

◆谁可以建立索引:

DBA或表的属主(即建立表的人);

DBMS一般会自动建立以下列上的索引:

PRIMARY KEY;

UNIQUE;

◆谁维护索引:DBMS自动完成。

◆使用索引:DBMS自动选择是否使用索引以及使用哪些索引。

一、索引

◆RDBMS中索引一般采用B+树、HASH索引来实现。

B+树索引具有动态平衡的优点。

HASH索引具有查找速度快的特点。

◆采用B+树还是HASH索引则由具体的RDBMS来决定。

◆索引是关系数据库的内部实现技术,属于内模式的范畴。

◆CREATE INDEX语句定义索引时,可以定义索引是惟一索引、非惟一索引或聚簇索引。

二、建立索引

◆语句格式

CREATE [UNIQUE] [CLUSTER] INDEX<索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>]]…);

【例14】

CREATE CLUSTER INDEX Stusname ON Student(Sname);

在Student表的Sname(姓名)列上建立一个聚簇索引

◆在最经常查询的列上建立聚簇索引以提高查询效率

◆一个基本表上最多只能建立一个聚簇索引

◆经常更新的列不宜建立聚簇索引

【例15】为学生-课程数据库中的Student,Course,SC三个表建立索引。

Student表按学号升序建惟一索引;

Course表按课程号升序建惟一索引;

SC表按学号升序和课程号降序建惟一索引。

三、删除索引

DROP INDEX <索引名>;

删除索引时,系统会从数据字典中删去有关该索引的描述。

【例16】删除Student表的Stusname索引

DROP INDEX Stusname;