SQL中的数据定义功能包括模式定义、表定义、视图定义、索引的定义。下面对以上操作一一总结:


 

1、模式的定义与删除

“模式”是一个数据库的命名空间,一个框架,打个比方:在java中,创建模式相当于创建一个包,而创建表相当于创建一个类,一个类是在某一个包下面进行管理的。在mysql中,创建模式与创建数据库是一样的,也就是create schema <模式名>与 create database <数据库名>是等效的。所以模式的定义与删除语句如下:

create schema <模式名> authorization <用户名>,例如创建一个学生-课程的模式S-T

create schema "S-T" authorization wang;//为用户wang创建一个模式S-T

删除模式语句如下:

drop schema <模式名> <cascade|restrict>

其中cascade与restrict两者必选其一。

cascade(级联),表示删除模式的同时,把该模式中的所有数据库对象(例如表等)也全部删除。

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


 

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

表的定义基本格式如下:

create table<表名>(

<列名> <数据类型> [列级完整性约束条件],

<列名> <数据类型> [列级完整性约束条件],

<列名> <数据类型> [列级完整性约束条件]

);

例如创建学生的选课表:

create table SC(

Sno char(9),

Cno char(4),

Sname char(20) unique,//取唯一值

primary key(Sno,Cno),//主码由两个属性构成,须作为表级完整性进行定义

foreign key(Sno) references Student(Sno),//表级完整性约束,Sno是外码,被参照的表是Student

foreign key(Cno) references Course(Cno)//表级完整性约束,Cno是外码,被参照的表是Coruse

);

删除基本表的定义如下:

drop table<表名>[restrict|cascade];

如果选择restrict,则该表的删除是有限制条件的。待删除的基本表不能被其他的约束所引用(如check,foreign key等约束),不能有视图,不能有触发器(trigger),不能有存储过程或函数等。

如果是cascade,则该表的删除没有限制条件。在删除表的同时,相关的依赖对象,例如视图,也将一并删除。

修改基本表的一般格式如下:

alter table <表名>

[add <新列名> <数据类型> [完整性约束]]

[drop <完整性约束名>]

[alter column <列名> <数据类型>];

例如,向Student表中添加“入学时间”:

alter table Student add S_entrance Date;

       将年龄的数据类型由字符型改为整型

alter table Student alter column Sage int;

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

alter table Course add unique (Cname);


 

3、索引的建立与删除

建立索引是为了加快查询速度,可以根据需要,在基本表上建立一个或多个索引,以提供多种存取路径,加快查找速度。

建立索引的语句定义如下:

create [unique][cluster] index <索引名> on <表名>(<列名>[<次序>][,<列名>[<次序>]]);

其中次序是指定索引值的排序次序,可以选择ASC(升序)或DESC(降序),缺省值是ASC。

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

cluster表明要建立的索引是聚簇索引。聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。例如:

create cluster index Stuname on Student(Sname);

该语句将会在Student表中的Sname列上建立一个聚簇索引,用户可以在最经常查询的列上建立聚簇索引以提高查询效率。在一个表上只能创建一个聚簇索引。如果对已经建立聚簇索引列上的数据进行更新操作时,常常导致表中记录的物理顺序发生改变,代价较大,所以对于经常更新的列不宜建立聚簇索引。

例如在SC表上创建一个索引,该索引是唯一的,且按学号升序和课程号降序,如下:

create unique index SCNO on SC(Sno ASC, Cno DESC);

索引的维护是由系统完成的,不用用户干预。建立索引是为了减少查询操作的时间,但如果数据增删改的操作比较频繁,系统则会话费很多时间来维护它,从而降低查询效率,这时可以删除一些不必要的索引,删除语句如下:

drop index <索引名> on <表名>或 alter table  <表名> drop index <索引名>

具体索引的使用方法,可以参照该网站:http://www.jb51.net/Special/621.htm

在RDBMS中,索引一般采用B+树、HASH索引来实现。B+树具有动态平衡的优点。HASH具有查找快速的优点。至于索引的实现是采用B+树还是HASH索引,则由具体的RDBMS来决定。

 

 

posted on 2017-09-30 13:46  Judy518  阅读(2636)  评论(0编辑  收藏  举报