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;