3.2 3.3 数据定义

第三章完整版->有道云笔记

二、SQL功能

以学生-课程数据库为例,定义一个学生-课程模式S-T。包括三个表:

  • 学生表:Student(++Sno++,Sname,Ssex,Sage,Sdept)
  • 课程表:Course(++Cno++,Cname,Cpno,Ccredit)
  • 学生选课表:SC(++Sno,Cno++,Grade)

1.数据定义

  • 模式的定义与删除

要创建模式,需有数据库管理员权限,或获得了数据库管理员授权的CREATE SCHEMA的权限。定义模式实际上定义了一个命名空间,在这个空间里可以进一步定义该模式包含的数据库对象,例如基本表、视图、索引等。

    CREATE SCHEMA<模式名> AUTHORIZATION <用户名>;
     /* 为用户WANG定义了一个学生-课程模式S-T */
     CREATE SCHEMA"S-T" AUTHORIZATION WANG; 
     /* 若没有指定<模式名>,则<模式名>隐含为用户名WANG */
     CREATE SCHEMA AUTHORIZATION WANG; 

创建模式的同时可以在这个模式定义中进一步创建基本表、视图、定义授权。

    CREATE SCHEMA<模式名> AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>];
    /* 为用户ZHANG创建一个模式TEST,并在其中定义一个表TAB1 */
    CREATE SCHEMA TEST AUTHORIZATION ZHANG
    CREATE TABLE TAB1(COL1 SMALLINT,
                      COL2 INT,
                      COL3 CHAR(20)
    );

删除模式,CASCADE(级联)和RESTRICT(限制)两者必选其一。选择CASCADE表示删除模式的同时把该模式中所有数据库对象全部删除;选择RESTRICT表示如果该模式中已经定义了下属的数据库对象,则拒绝该删除语句的执行。

    DROP SCHEMA<模式名><CASCADE|RESTRICT>;
    /* 删除模式ZHANG,同时,该模式中已经定义的表TAB1也被删除了 */
    DROP SCHEMA ZHANG CASCADE;
  • 基本表的定义、删除与修改

定义基本表 CREATE TABLE

    CREATE TABLE<表名>(<列名><数据类型>[列级完整性约束条件]
                       [,<列名><数据类型>[列级完整性约束条件]]
                       ...
                       [,表级完整性约束条件]);
    /* 建立一个“学生”表Student */
    CREATE TABLE Student
      (Sno CHAR(9) PRIMARY KEY, /* 列级完整性约束条件,Sno是主码 */
      Sname CHAR(20) UNIQUE,    /* Sname取唯一值 */
      Ssex CHAR(2),
      Sage SMALLINT,
      Sdept CHAR(20)
     );
    /* 建立一个“课程”表Course */
    CREATE TABLE Course
      (Cno CHAR(4) PRIMARY KEY, /* 列级完整性约束条件,Cno是主码 */
      Cname CHAR(40) NOT NULL,  /* 列级完整性约束条件,Cname不能取空值 */
      Cpno CHAR(4),             /* Cpno表示先修课 */
      Ccredit SMALLINT,
      FOREIGN KEY(Cpno) REFERENCE Course(Cno)
      /* 表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno */
      /* 本例用来说明参照表和被参照表可以是同一个表 */
     );    
     /* 建立学生选课表SC */
    CREATE TABLE SC
      (Sno CHAR(9),
      Cno CHAR(4),
      Grade SMALLINT,
      PRIMARY KEY(Sno,Cno),  /* 主码由两个属性构成,必须作为表级完整性进行定义 */
      FOREIGN KEY(Sno) REFERENCE Student(Sno),
            /* 表级完整性约束条件,Sno是外码,被参照表是Student */
      FOREIGN KEY(Cno) REFERENCE Course(Cno)
            /* 表级完整性约束条件,Cno是外码,被参照表是Course */
     );

数据类型:在SQL中域的概念用数据类型来实现。定义表的各个属性时需要指明其数据类型及长度。

模式与表:每一个基本表都属于某一个模式,一个模式包含多个基本表。定义基本表时有三种方法定义它所属的模式。

    /* 1.在表中明显地给出模式名 */
    CREATE TABLE "S-T".Student(...);/* Student所属的模式是S-T */
    /* 2.在创建模式语句中同时创建表 */
    /* 为用户ZHANG创建一个模式TEST,并在其中定义一个表TAB1 */
    CREATE SCHEMA TEST AUTHORIZATION ZHANG
    CREATE TABLE TAB1(COL1 SMALLINT,
                      COL2 INT,
                      COL3 CHAR(20)
    );
    /* 3.设置所属的模式,这样在创建表时表名中不必给出模式名,系统根据搜索路径确定模式 */
    SHOW search_path;                /* 显示当前搜索路径 */
    /* 搜索路径默认为$user,PUBLIC,表示首先搜索与用户名相同的模式名,如果不存在,则使用PUBLIC模式 */
    /* 数据库管理员可以设置搜索路径来建立S-T.Student基本表 */
    SET search_path TO "S-T",PUBLIC; /* 设置搜索路径 */
    CREATE TABLE Student(...);       /* 定义基本表 */
    

修改基本表 ALTER TABLE

    ALTER TABLE <表名>
    [ADD [COLUMN] <新列名><数据类型> [完整性约束]]
    [ADD<表级完整性约束>]
    [DROP [COLUMN]<列名> [CASCADE|RESTRICT]]
    [DROP CONSTRAINT<完整性约束名> [RESTRICT|CASCADE]]
    [ALTER COLUMN <列名><数据类型>];
    
    /* 向Student表增加“入学时间”列,其数据类型为日期型 */
    ALTER TABLE Student ADD S_entrance DATE; /* 新增加的列一律为空值 */
    /* 将年龄的数据类型改为整数 */
    ALTER TABLE Student ALTER COLUMN Sage INT;
    /* 增加课程名称必须取唯一值的约束条件 */
    ALTER TABLE Course ADD UNIQUE(Cname);
    

删除基本表 DROP TABLE

    DROP TABLE <表名> [RESTRICT|CASCADE];
    /* 删除Student表 */
    DROP TABLE Student CASCADE;

CASCADE(级联)和RESTRICT(限制),前者删除时,相关依赖对象如视图都将被一起删除,后者若存在依赖该表的对象则基本表不能被删除。

  • 索引的创建与删除

建立索引 CREATE INDEX

    CREATE [UNIQUE] [CLUSTER] INDEX<索引名>
    ON <表名>(<列名>[次序][,<列名>[<次序>]]...);
    
    /* Student表按学号升序建立唯一索引 */
    CREATE UNIQUE INDEX Stusno ON Student(Sno);  
    /* Course表按课程号升序建立唯一索引 */
    CREATE UNIQUE INDEX Coucno ON Course(Cno);
    /* SC表按学号升序、课程号降序建立唯一索引 */
    CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);

次序可选 ASC-升序(默认) DESC-降序,UNIQUE表明此索引的每一个索引值只对应唯一的数据记录,CLUSTER表示要建立的索引是聚簇索引。

修改索引

    ALTER INDEX <旧索引名> RENAME TO <新索引名>;
    /* 将SC表的SCno索引名改为SCSno */
    ALTER INDEX SCno RENAME TO SCSno;

删除索引

    DROP INDEX <索引名>;
    /* 删除Student表的Stusname索引 */
    DROP INDEX Stusname;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,527评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,687评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,640评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,957评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,682评论 6 413
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,011评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,009评论 3 449
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,183评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,714评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,435评论 3 359
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,665评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,148评论 5 365
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,838评论 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,251评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,588评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,379评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,627评论 2 380