共计 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
,其中Sno
和Cno
是外码,别离参照 Student
表的 Sno
列和 Course
表的 Cno
列
Sno
和Cno
是SC
的主码,必须应用表级完整性定义
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;