四时宝库

程序员的知识宝库

(二)SQL数据模式、表、索引的建立与删除

一、模式的定义与删除

1.定义模式

 CREATE SCHEMA <模式名> AUTHORIZATION <用户名>

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

例如:定义一个学生—课程模式S-T

CREATE SCHEMA S-T AUTHORIZATION WANG;

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

定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象,例如基本表、视图、索引等。

2.删除模式

DROP SCHEMA <模式名><CASCADE|RESTRICT>

其中CASCADE、RESTRICT两者必选一个

.选择CASCADE(级联),表示再删除模式的同时把该模式中所有的数据库对象全部一起删除

.选择RESTRICT(限制),表示如果该模式中已经定义了下属的数据库对象,则拒绝执行该删除语句。

例如:DROP SCHEMA S-T CASCADE;

该语句删除了模式S-T。同时把该模式下的表、视图等删除。

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

1.定义基本表

CREATE TABLE <表名> (<列名> <数据类型> [列级约束条件],
 <列名> <数据类型> [列级约束条件],
 …… 
 [<表级约束条件>]);

建立一个"课程"表Course。

CREATE TABLE Course(Cno CHAR(4) PRIMARY KEY, /*列级完整性约束条件,Cno是主码*/
 Cname CHAR(40),
 Cpno CHAR(4), /*Cpno的含义是先修课*/
 credit SMALLINT,
 FOREIGN KEY (Cpno) REFERENCES Course(Cno) /*表级约束性条件,Cpno是外码,被参照表是Course,被参照列是Cno*/
 );

2.修改基本表

 ALTER TABLE <表名>
 [ADD <新列名><数据类型>[完整性约束]]
 [DROP <完整性约束名>]
 [ALTER COLUMN <列名> <数据类型>];

向 Course表增加“开始时间”列,将其数据类型为日期型

 ALTER TABLE Course ADD C_start DATE;

将Ccredit 分数的数据类型由短整数改为整数

ALTER TABLE Course ALTER COLUMN Ccredit INT ;

增加课程名称必须取唯一值得约束条件

ALTER TABLE Course ADD UNIQUE(Cname);

3.删除基本表

 DROP TABLE <表名> [RESTRICT|CASCADE]

.选择RESTRICT :则该表的删除是有限制条件的。欲删除的基本表不能被其他表的约束所引用(如 CHECK,FOREIGN KEY等约束,不能有视图,不能有触发器,不能 有存储过程或者函数等。如果存在这些依赖该表的对象,则此表不能被删除。

.选择CASCADE:则该表的删除没有限制条件。在删除基本表的同时,相关的依赖对象,如视图,都被删除。

不同的数据库在遵循SQL标准的基础上具体实现细节和处理策略会与标准有差别:

?

三、索引的建立与删除

1、建立索引

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

. 其中,<表名>是要建索引的基本表的名字。索引可以建立在该表的一列过着多列上,各列之间用逗号分隔。每个<列名>后面还可以用<次序>指定索引值的排列次 序,可选用ASC(升序)或DESC(降序),缺省值为ASC。

.UNIQUE表明此索引的每一个索引值只对应唯一的数据记录。

.CLUSTER表示要建立的索引是聚簇索引。所谓的聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。

例如: CREATE CLUSTER INDEX Coursename ON Course(Cname);

将会在Course表的Cname列上建立一个聚簇索引,而且Course表中的记录将按照Cname值得升序存放。

2、删除索引

 DROP INDEX <索引名>;

例如: 删除Course表的Coursename索引

 DROP INDEX Coursename;

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

??

??

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接