• 数据库之数据定义


    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来决定。

     

  • 相关阅读:
    block 相关清单
    在Objective-C 中使用字符生成NSArray、NSDictionary、NSNumber
    NSURLSession 相关清单
    iOS 相关博客清单
    sqlite 一条记录判断一个字段是否like另一个字段
    iphone程序适配ipad可以用下面的宏进行尺寸改写
    NSURLSession使用说明及后台工作流程分析
    iOS 6 新的快捷初始化写法
    ios 应用发布渠道大全
    iOS-获取当前时间的年、月、日、时、分、秒
  • 原文地址:https://www.cnblogs.com/codeMedita/p/7614724.html
Copyright © 2020-2023  润新知