说在前面
这篇文章是我在修《数据库原理》时做的笔记,转载请注明来源。
请复制:

本文来自瀚可,转载请注明来源。https://hankzhangcn.gitee.io/2020/05/06/数据库原理复习/

第一章 绪论

1.1 数据库系统概述

1.1.1 四个基本概念

数据

数据库中存储的基本对象

定义

描述事务的符号记录

种类

文本,图像,音视频,档案记录等

特点

与其语义密不可分,如93.
必须指出是人数?还是长度?

数据库

长期存在计算机,有组织,可共享的大量数据集合

DBMS

是系统软件(大型的软件系统)

功能
  • 提供数据定义语言(ddl,如SQL)来定义数据库中的数据对象
  • 数据的组织、储存、管理。
  • 数据操作(增改查删)
  • 事务管理运行管理。
  • 数据库的建立和维护

DBS

在计算机系统中引入数据库后有:

  • 数据库
  • DBMS
  • 应用工具
  • 数据库管理员DBA

1.1.2 数据管理技术的产生和发展

暂略

1.1.3 特点

暂略

第二章

暂略

第三章 关系数据库标准语言SQL

概述

章节 要点
3.1 SQL概述 ×
3.2 学生-课程数据库 ×
3.3 数据定义
3.4 数据查询
3.5 数据更新 -
3.6 视图
3.7 小结

3.1 SQL概述

3.1.1 SQL 的产生与发展

3.1.2 SQL的特点

特点 解释
综合统一
高度非过程化 //只要提出“做什么”,无须了解存取路径
面向集合的操作方式
以同一种语法结构提供多种使用方式 //可独立,可嵌入(c,c++等)
语言简洁,易学易用
动词
数据定义 CreatedropALTER
数据查询 select
数据操纵 Insertdeleteupdate
数据控制 Grantrevoke

3.1.3 SQL的基本概念

三级结构

图暂略

基本表

  • 本身独立存在的表
  • SQL中一个关系就对应一个基本表
  • 一个(或多个)基本表对应一个存储文件
  • 一个表可以带若干索引

储存文件

  • 逻辑结构组成了数据库的内模式
  • 物理结构是任意的,对用户透明

视图

  • 数据库中只存放视图的定义而不存放视图对应的数据视图是一个虚表
  • 从一个或几个基本表导出的表
  • 用户可以在视图上再定义视图

3.2 S-C表

学生-课程模式 S-C :

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

3.3 数据定义

操 作 对 象 操  作  方  式
创  建 删  除 修  改
数据库 CREATE DATABASE DROP DATABASE ALTER DATABASE
DATABASE
模式 CREATE SCHEMA DROP SCHEMA
SCHEMA
CREATE TABLE DROP TABLE ALTER TABLE
TABLE
视  图 CREATE VIEW DROP VIEW
VIEW
索  引 CREATE INDEX DROP INDEX
INDEX

3.3.1 数据库

操作 方法
查看所有的数据库 show databases;
创建s_t数据库 CREATE DATABASE s_t;
选择数据库 use s_t;
删除数据库 DROP DATABASE s_t

3.3.2 模式

创建一个模式

并且可以在概念上将其看作是包含表、视图和权限定义的对象。

操作 方法
创建模式 CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
[例1]

定义一个学生-课程模式S_T

1
CREATE SCHEMA ‘S_T’ AUTHORIZATION WANG

为用户WANG定义了一个模式S_T

[例2]
1
CREATE SCHEMA AUTHORIZATION WANG

<模式名>隐含为用户名WANG
如果没有指定<模式名>,那么<模式名>隐含为<用户名>

CREATE SCHEMA中可以接受CREATE TABLECREATE VIEWGRANT子句。

1
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>]
[例3]

MySQL不支持

1
2
3
4
5
6
7
CREATE SCHEMA TEST AUTHORIZATION ZHANG 
CREATE TABLE TAB1(COL1 SMALLINT
COL2 INT
COL3 ,
COL4(103),
COL5(52)
)

为用户ZHANG创建了一个模式TEST,并在其中定义了一个表TAB1

删除模式

1
DROP SCHEMA <模式名> <CASCADE|RESTRICT>
CASCADE(级联)
  • 删除模式的同时把该模式中所有的数据库对象全部删除
RESTRICT(限制)
  • 如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该- 删除语句的执行。
  • 当该模式中没有任何下属的对象时才能执行。

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

定义基本表

1
2
3
4
5
6
CREATE TABLE <表名>
<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ]

[,<表级完整性约束条件> ]

有5类约束

  • 主关键字约束(Primary
  • 外关键字约束(Foreign
  • 唯一性约束(Unique
  • 检查约束(Check
  • 默认约束(Default
[例5]

建立“学生”表Student学号是主码,姓名取值唯一。

1
2
3
4
5
6
7
  CREATE TABLE Student(
Sno CHAR(9) PRIMARY KEY, /* 列级完整性约束条件*/
Sname CHAR(20), /* Sname取唯一值*/
Ssex CHAR(2),
Sage SMALLINT
Sdept CHAR(20)
)
[例6]

建立一个“课程”表Course

1
2
3
4
5
6
7
CREATE TABLE  Course(
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4) ,
Ccredit SMALLINT
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
)
[例7]

建立一个“学生选课”表SC

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE  SC(
Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT
PRIMARY KEY (Sno,Cno),
/* 主码由两个属性构成,必须作为表级完整性进行定义*/
FOREIGN KEY (Sno) REFERENCES Student(Sno),
/* 表级完整性约束条件,Sno是外码,被参照表是Student */
FOREIGN KEY (Cno) REFERENCES Course(Cno)
/* 表级完整性约束条件, Cno是外码,被参照表是Course*/
)

修改基本表

1
2
3
4
ALTER TABLE <表名>
[ ADD <新列名> <数据类型> [ 完整性约束 ] ]
[ DROPCOLUMN『仅Mysql需要』) <完整性约束名> ]
[ ALTER COLUMN<列名> <数据类型> ]
[例8]

Student表增加“入学时间”列,其数据类型为日期型。

1
ALTER TABLE Student ADD S_entrance DATE

不论基本表中原来是否已有数据,新增加的列一律为空值。

[例9]

将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。

1
ALTER TABLE Student ALTER COLUMN Sage INT
[例10]

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

1
ALTER TABLE Course ADD UNIQUE(Cname)

删除基本表

1
DROP TABLE <表名>[RESTRICT| CASCADE]
[例11]

删除Student

1
DROP TABLE  Student  CASCADE 

基本表定义被删除,数据被删除
表上建立的索引、视图、触发器等一般也将被删除

[例12]

若表上建有视图,选择RESTRICT时表不能删除

1
2
3
4
5
6
7
CREATE VIEW IS_Student      
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS'

DROP TABLE Student RESTRICT

如果选择CASCADE时可以删除表,视图也自动被删除

1
DROP TABLE Student CASCADE

3.3.4 索引的建立与删除

索引目的

  • 加快查询

关于方法

  • B+树索引具有动态平衡的优点
  • HASH索引具有查找速度快的特点
  • 用B+树,还是HASH索引 则由具体的RDBMS来决定。

建立索引

1
2
3
CREATE [UNIQUE INDEX <索引名> 
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…)
[using btree/ hash]

UNIQUE:相当于增加了一个UNIQUE约束。
CLUSTER:聚簇索引。有主键就用主键,如果没有就用唯一非空,还没有就会自动建立一个。

一些提示
  • 在最经常查询的列上建立聚簇索引以高查询效率
  • 一个基本表上最多只能建立一个聚簇引
  • 聚簇索引的适用范围
  • 很少对基表进行增删操作
  • 很少对其中的变长列进行修改操作
  • 经常更新的列不宜建立聚簇索引
  • 用<次序>指定索引值的排列次序
    升序:ASC;降序:DESC;缺省值:ASC

删除索引

1
DROP INDEX <索引名>
[例13]
1
2
CREATE CLUSTER INDEX Stusname 
ON Student(Sname)

在Student表的Sname列上建立一个聚簇索引

[例14]

为学生-课程数据库中的StudentCourseSC三个表建立索引。

1
2
3
CREATE UNIQUE INDEX  Stusno ON Student(Sno)
CREATE UNIQUE INDEX Coucno ON Course(Cno)
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC)

Student表按学号升序建唯一索引
Course表按课程号升序建唯一索引
SC表按学号升序和课程号降序建唯一索引

[例15]

删除Student表的Sname索引

1
DROP INDEX Sname on student;