关于数据库:数据库系统概论王珊第三章关系数据库标准语言SQL第二三节数据定义

27次阅读

共计 3139 个字符,预计需要花费 8 分钟才能阅读完成。

  • pdf 下载:明码 7281
  • 专栏目录首页:【专栏必读】(考研复试)数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解

零:无关阐明

(1)装置数据库与建表

  • 对于数据库如何装置,表如何建设这里不再介绍,请移步:(数据库系统概论 | 王珊)第三章关系数据库规范语言 SQL- 第零节:MYSQL 环境装置和表的建设以及一些注意事项
  • 所用表为(下面文章中也有残缺代码):

(2)一些语法阐明

因为咱们应用的 MYSQL 所以有些语法和可能和 SQL 规范有所差别,甚至无奈实现,总结如下

①:对于语法中的括号

  • <>:尖括号用于分隔字符串
  • []:方括号示意规定中的可选元素,能够抉择也能够省略
  • {}:花括号示意汇集规定中的元素,必须明确指定

②:其它

  • 在 SQLserver 中咱们能够用 CREATE DATABASE来创立数据库,而用 CREATE SCHEMA 来创立架构。然而在 MYSQL 中两者是等同作用的,能够认为没有区别。所以上面介绍时没有理论的演示例子
  • 在 MYSQL 中字符串用的不是单引号,而是 “(键盘上数字 1 右边的那个)
  • 在 MYSQL 中创立模式时是没有前面的 AUTHROIZATION < 用户名 >
  • MYSQL 中大小写均可行

回归正题,SQL 的数据定义次要包含以下内容

  • 模式定义
  • 表定义
  • 视图定义
  • 索引定义
  • 留神 批改视图和批改模式时只能删除重建

一:模式的定义和删除(SCHEMA)

留神:在 SQLserver 中咱们能够用 CREATE DATABASE 来创立数据库,而用 CREATE SCHEMA 来创立架构。然而在 MYSQL 中两者是等同作用的,能够认为没有区别。所以上面介绍时没有理论的演示例子

(1)定义模式

语法:CREATE SCHEMA < 模式名 > AUTHORIZATION < 用户名 >(留神下面语法阐明)

  • 如果没有指定 < 模式名 >,那么 < 模式名 > 隐含为 < 用户名 >
  • 定义模式实质是定义了一个 命名空间
  • 创立模式的同时也能够创立其它货色:CREATE SCHEMA < 模式名 > AUTHORIZATION < 用户名 > [< 表定义子句 > | < 视图定义子句 > | < 受权定义子句 >]

(2)删除模式

语法:DROP SCHEMA < 模式名 ><CASCADE|RESTRICT>(留神下面语法阐明)

  • CASCADE:示意 级联,也即删除模式时会删除该模式中所有数据库对象
  • RESTRICT:示意 限度,也即在删除时如果该模式下定义了其它对象,则回绝

二:根本表的定义、删除和批改(TABLE)

(1)定义根本表

语法

  • 建表的同时通常还能够定义与该表无关的完整性约束条件(参照前几节内容)
  • 如果完整性约束条件波及该表的多个属性列,则必须定义在表级上,否则既能够在列级上也能够在表级上

演示
【例 1】:建设学生表Student,其中Sno 是主码,且 Sname 不能反复

CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY, // 主码
    Sname CHAR(20) UNIQUE,    // 惟一值
    Ssex    CHAR(2),
    Sage SMALLINT,
    Sdept CHAR(20)
);

【例 2】:建设课程表 Course,其中Cno 是主码,Cname不能取空值,Cpno代表先修课(意思是学习该课前必须先学习某个课程),它是外码,须要参照本表,参照列为Cno

CREATE TABLE Course
(Cno CHAR(4) PRIMARY KEY,// 主码
    Cname CHAR(20) NOT NULL,// 非空
    Cpno CHAR(4),
    Credit SMALLINT,
    FOREIGN KEY (Cpno) REFERENCES Course(Cno)// 表级完整性,Cpno 是外码,被参照示意 Course,被参照列是 Cno
);

【例 3】:建设学生选课表 SC,其中SnoCno是外码,别离参照 Student 表的 Sno 列和 Course 表的 Cno

  • SnoCnoSC的主码,必须应用表级完整性定义
CREATE TABLE SC
(Sno CHAR(9),
    Cno CHAR(4),
    Grade SMALLINT,

    PRIMARY KEY(Sno,Cno),// 必须应用表级完整性定义
    FOREIGN KEY(Sno) REFERENCES Student(Sno),
    FOREIGN KEY(Cno) REFERENCES Course(Cno)
)

(2)批改根本表

语法

  • ADD:用于减少新列,新的列级完整性约束条件和新的表级完整性约束条件
  • DROP COLUMN:用于删除表中的列
  • DROP CONSTRAINT:用于删除指定的完整性约束条件
  • ALTER COLUMN:用于批改原有的列定义

演示

【例 4】:向 Student 表中减少“退学工夫”列,数据类型为“日期型”

ALTER TABLE Student ADD Sentrance DATE;

【例 5】:将 Student 表“年龄”这一列的数据类型由改为 INT

ALTER TABLE Student ALTER COLUMN Sage CHAR;

【例 6】:Course表中的 Cname 必须取惟一值

ALTER TABLE Course ADD UNIQUE(Cname);

【例 7】:删除 Student 表中的“退学工夫”列

ALTER TABLE Student DROP COLUMN Sentrance CASCADE;

【例 8】:删除 Course 表中 Cname 的惟一束缚

  • 此局部看完这个就明确了:(数据库系统概论 | 王珊)第五章数据库完整性 - 第四、六、七节:束缚命名子句、断言和触发器
ALTER TABLE Course DROP INDEX Cname;

MYSQL 在删除束缚时有一些不一样,请点击查看:链接

(3)删除根本表

语法

  • 抉择RESTRICT:欲删除的根本表不能被其余表的束缚所援用(比方 CHECK、FOREIGN KEY 等)、不能有视图、不能有触发器(trigger),不能有存储过程或函数等
  • 抉择CASCADE:没有限度条件,所有相干依赖对象连同根本表一起删除

演示

【例 9】:删除 Student 表,应用RESTRICT

  • 因为 SC 表参照的是Student,所以删除不胜利
DROP TABLE student RESTRICT;

三:索引的建设与删除(INDEX)

当表的数据量较大时,查问操作就会非常耗时。建设索引是放慢查问速度的无效伎俩

  • 数据库索引相似于图书前面的索引,能疾速定位须要查问的内容

用户能够依据应用环境的须要在根本表上建设一个或多个索引,类型有

  • 程序文件上的索引
  • B+ 树索引
  • 散列索引
  • 位图索引

索引尽管能放慢查问速度,但也有毛病

  • 须要占用肯定的存储空间
  • 会进步查问速度然而会升高更新速度

(1)建设索引

语法

  • < 表名 >:要建设索引的根本表的名字
  • 索引能够建设在该表的一列或多列上,各列之间应用逗号分隔
  • 每个 < 列名 > 前面还能够用 < 秩序 > 指定索引值的排列秩序,可选 ASC- 升序(默认)或 DESC- 降序
  • UNIQUE:表明此索引的每一个索引值只对应惟一的数据记录
  • CLUSTER:示意须要建设聚簇索引(第七章会讲到)

演示

【例 10】:请按以下要求建设索引

  • Student表按学号升序建设惟一索引
  • Course表按课程号升序建设惟一索引
  • SC表按学号升序和课程号降序建设惟一索引
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);

(2)批改索引

语法

演示

【例 11】:将 SC 表的 SCno 索引改名为SCSno

ALTER INDEX SCno RENAME TO SCSno

(3)删除索引

语法

演示
【例 12】:删除SC 表的 SCSno索引

DROP INDEX SCSno

// 如果失败,也可这样写
DROP INDEX SCSno on SC;
DROP INDEX SC.SCSno;

正文完
 0