目录
3.3.1 模式的定义与删除
1. 定义模式
2. 删除模式
CASCADE(级联)
RESTRICT(限制)
3.3.2 基本表的定义、删除与修改
表的定义
2.数据类型
3. 模式与表
4. 修改基本表
5. 删除基本表
3.3.3 索引的建立与删除
1. 建立索引
2. 修改索引
3. 删除索引
3.3.4 数据字典
SQL的数据定义功能: 定义数据库中的各种对象,模式定义,表定义,视图和索引的定义
现代关系数据库管理系统提供了一个层次化的数据库对象命名机制,一个关系数据库管理系统的实例(Instance)中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象。
3.3.1 模式的定义与删除
1. 定义模式
SQL中,模式定义语句如下: CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
[例3.1] 为用户WANG定义一个学生-课程模式S-T
CREATE SCHEMA “S-T” AUTHORIZATION WANG;
如果语句没有指定<模式名>,<模式名>隐含为<用户名>
[例3.2] CREATE SCHEMA AUTHORIZATION WANG;
要创建模式,调用该命令的用户必须拥有数据库管理员权限,或获得了数据库管理员授予CREATE SCHEMA 的权限。
定义模式实际上定义了一个命名空间。在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。
在CREATE SCHEMA中可以接受:CREATE TABLE ,CREATE VIEW ,GRANT子句定义模式
即用户可以在创建模式的同时,在模式定义中进一步创建基本表、视图,定义授权。
[例3.3]为用户ZHANG创建了一个模式TEST,并且在其中定义一个表TAB1
CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE TAB1 ( COL1 SMALLINT, COL2 INT, COL3 CHAR(20), COL4 NUMERIC(10,3), COL5 DECIMAL(5,2) );
2. 删除模式
SQL中,删除模式语句如下: DROP SCHEMA <模式名><CASCADE|RESTRICT>
CASCADE(级联)
删除模式的同时把该模式中所有的数据库对象全部删除
RESTRICT(限制)
如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝执行该删除语句。
仅当该模式中没有任何下属的对象时才能执行。
[例3.4] DROP SCHEMA ZHANG CASCADE;
含义:删除模式ZHANG,同时该模式中定义的表TAB1也被删除
3.3.2 基本表的定义、删除与修改
表的定义
定义基本表,基本格式如下:
CREATE TABLE <表名>
(<列名><数据类型>[<列级完整性约束条件>],<列名><数据类型>[<列级完整性约束条件>],...[<表级完整性约束条件>]);
<表名> :所要定义的基本表的名字
<列名>:组成该表的各个属性(列)
<列级完整性约束条件>:涉及相应属性列的完整性约束条件
<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件
如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
例子:
CREATE TABLE Course (Cno CHAR(4) PRIMARY KEY, /* 列级完整性约束条件,Cno是主码*/
Cname CHAR(40) NOT NULL, /* 列级完整性约束条件,Cname取值非空*/
Cpno CHAR(4), Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno) /* 表级完整性约束条件【参照完整性】,外码cpno被参照表为course,被参照列为cno*/
2.数据类型
SQL中域的概念用数据类型来实现
定义表的属性时需要指明其数据类型及长度
选用哪种数据类型,考虑两方面:1.取值范围 如:人的年龄一般在100岁左右,选用短整数;教职工适合年龄 2.要做哪些运算 如,年龄可以用CHAR(3); 计算平均年龄:整数型
3. 模式与表
每一个基本表都属于某一个模式
一个模式包含多个基本表
定义基本表所属模式方法: 3种方法
一:在表名中明显地给出模式名
Create table "S-T".Student(......); /*模式名为 S-T*/
Create table "S-T".Course(......);
Create table "S-T".SC(......);
方法二:在创建模式语句的同时创建表
方法三:设置所属的模式 (创建表时,表名中无需给出模式名)
创建基本表(其他数据库对象也一样)时,若没有指定模式,系统根据搜索路径来确定该对象所属的模式
关系数据库管理系统会使用模式列表中第一个存在的模式作为数据库对象的模式名
若搜索路径中的模式名都不存在,系统给出错误
显示当前的搜索路径: SHOW search_path;
搜索路径的当前默认值是:$user,PUBLIC
含义:首先搜索与用户名相同的模式名,如果模式名不存在,则使用PUBLIC模式
数据库管理员也可以设置搜索路径,然后定义基本表 SET search_path TO “S-T” , PUBLIC; Create table Student(......); 结果建立了S-T.Student基本表。
含义:关系数据库管理系统发现搜索路径中第一个模式名S-T,就把该模式作为基本表Student所属的模式。
4. 修改基本表
SQL中,修改基本表一般格式:
5. 删除基本表
3.3.3 索引的建立与删除
建立索引的目的:加快查询速度
B+树索引具有动态平衡的优点,HASH索引具有查找速度快的特点
谁可以建立索引:数据库管理员 或 表的属主(即:建立表的人)
谁维护索引:关系数据库管理系统自动完成
使用索引:关系数据库管理系统自动选择合适的索引作为存取路径,用户不必也不能显式地选择索引
索引属于内模式的范畴
索引占用一定的存储空间,当基本表更新时,索引要进行相应的 维护,会增加数据库负担,根据实际需求有选择的创建索引。 SQL标准中没有涉及索引,但商用关系数据库管理系统一般是支 持索引机制。
1. 建立索引
创建索引语句格式如下:
CREATE [UNIQUE] [CLUSTER] INDEX<索引名>
ON <表名>(<列名>[<次序>]);
<表名>:要建索引的基本表的名字
索引:可以建立在该表的一列或多列上,各列名之间用逗号分隔
<次序>:指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC
UNIQUE:此索引的每一个索引值只对应唯一的数据记录
CLUSTER:表示要建立的索引是聚簇索引
2. 修改索引
修改索引语句格式如下:
ALTER INDEX<旧索引名> RENAME TO<新索引名>
3. 删除索引
索引一经建立就由系统使用和维护,不需用户干预。如果面临频繁的数据增删改,系统需要花费时间来维护索引, 降低了查询效率。需要删除不必要的索引。删除时,系统会从数据字典中删去有关该索引的描述。
删除索引语句格式如下: DROP INDEX <索引名>;
3.3.4 数据字典
数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有定义信息:
关系模式定义、视图定义、索引定义
完整性约束定义
各类用户对数据库的操作权限
统计信息等
关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息。