CPT103-Lecture 1

什么是数据库?

数据库是以一定方式存储大量数据集合。其中的数据通常是有组织的,并可以共享重复使用,通常使用数据库管理系统 (DBMS) 来管理。
数据库的类型有很多,包括:

  • 关系数据库:这是最常见类型的数据库。关系数据库中的数据存储在表中。
  • NoSQL 数据库:NoSQL 数据库是为非关系数据设计的。NoSQL 数据库通常比关系数据库更灵活和可扩展。
  • 云数据库:云数据库是托管在云中的数据库。云数据库可以提供灵活性和可扩展性。

以下是一些常见的数据库示例:

  • MySQL:MySQL 是一种流行的关系数据库。
  • PostgreSQL:PostgreSQL 是一种流行的关系数据库。
  • MongoDB:MongoDB 是一种流行的 NoSQL 数据库。
  • Amazon Relational Database Service (RDS):RDS 是 Amazon Web Services (AWS) 提供的云数据库服务。

CPT103中,我们需要学习关系数据库,并使用MySQL完成课程要求。

关系数据库

关系数据库建立在关系模型的基础上使用表格来组织数据。每个表都包含。行代表数据中的记录,列代表记录的属性。不同的表之间可以通过外键相互关联。(外键是表中的一列,它引用另一个表中的主键。)
想象一个学校,它需要存储学生、课程和成绩等信息。

我们可以使用关系数据库来存储这些信息。
学生表

学生ID 学生姓名 性别 出生日期
1 张三 2000-01-01
2 李四 2001-02-02
3 王五 2002-03-03

课程表

课程ID 课程名称 老师
1 数学 王老师
2 语文 李老师
3 英语 张老师

成绩表

学生ID 课程ID 成绩
1 1 90
1 2 80
1 3 70
2 1 85
2 2 95
2 3 80
3 1 75
3 2 65
3 3 90

学生表中的每个学生都有一个唯一的学生ID课程表中的每个课程都有一个唯一的课程ID成绩表中的每条记录都包含一个学生ID和一个课程ID
成绩表中的学生ID课程ID外键,它们引用学生表课程表中的主键。通过这些外键,我们可以将学生表课程表成绩表关联起来。
例如,我们可以查询所有学生的成绩。为此,我们可以将学生表成绩表连接起来。连接条件是学生表中的学生ID成绩表中的学生ID相等。

1
2
3
4
5
6
7
8
9
10
SELECT
学生姓名,
课程名称,
成绩
FROM
学生
INNER JOIN
成绩
ON
学生.学生ID = 成绩.学生ID;

这个查询将返回以下结果:

1
2
3
4
5
6
7
8
9
10
11
| 学生姓名 | 课程名称 | 成绩 |
|---|---|---|
| 张三 | 数学 | 90 |
| 张三 | 语文 | 80 |
| 张三 | 英语 | 70 |
| 李四 | 数学 | 85 |
| 李四 | 语文 | 95 |
| 李四 | 英语 | 80 |
| 王五 | 数学 | 75 |
| 王五 | 语文 | 65 |
| 王五 | 英语 | 90 |

关系数据库这种结构的好处在于它类似于电子表格,因此易于理解和使用。并且可以确保数据的完整性一致性。但相对的,它的结构是固定的,灵活性和可拓展性不如其他数据库。

关系数据库的特点

  1. 数据结构化:数据存储在表中。每个表都包含行和列。行代表数据中的记录,列代表记录的属性。
  2. 数据独立性:数据独立于应用程序。应用程序可以通过SQL语句来访问和操作数据,而无需更改应用程序代码。
  3. 数据共享性:数据可以在多个应用程序之间共享。这可以提高数据的利用率和效率。
  4. 数据完整性:关系型数据库可以通过完整性约束来确保数据的完整性。完整性约束可以确保数据准确、一致和可靠。
  5. 事务性:支持事务。事务是一组操作,要么全部成功,要么全部失败。这可以确保数据的一致性。
  6. 安全性:可以通过权限控制来确保数据的安全性。权限控制可以限制用户对数据的访问和操作权限。
  7. 易用性:提供了SQL语言来访问和操作数据。SQL语言是一种简单易学的语言。

数据库管理系统 DBMS(Database Management System)

Database 是存储数据的集合。通常由多个表组成,每个表包含一个或多个字段。
而DBMS 是用于管理数据库的软件系统。提供一系列功能来创建、维护和访问数据库。它可以管理多个数据库,一个数据库可以由多个用户使用。
简而言之,Database是数据集合,可以使用DBMS来管理Database。
但是,DBMS是一种服务器应用程序,通常在服务器上运行,它没有图形界面,所以我们一般使用为管理DBMS而设计的客户端应用程序与DBMS通信。除此之外,还有其他的客户端应用程序,它们使用DBMS提供服务,比如说网络游戏、酒店预订网站以及ATM上的软件。

一些术语

  • 关系(Relation):是一个数学概念,其物理形式是一个有列和行
  • 属性(Attribute):是关系中的有命名的一列
  • 域(Domain):是允许属性值的集合
  • 元组(Tuple):是关系的一行。(元组的顺序并不重要)
  • 程度(Dgree):关系的程度就是它所包含的属性的数量
  • 基数(Cardinality):关系中元组的数量。

对于某些术语,我们有其他的叫法:

正式的术语 允许的叫法 允许的叫法
关系(Relation) 表格(Table) 文件(File)
元组(Tuple) 行(Raw) 记录(Record)
属性(Attribute) 列(Column) 字段(Field)

关系的键

  • 关系中不允许重复的元组
  • 因此,我们需要能够识别一个或多个属性(称为关系键),唯一地标识关系中的每个元组。
  1. 超级键(Superkey):在关系中唯一标识元组的一个属性或一组属性。
    • 其可能包含唯一标识所不需要的额外属性。
  2. 候选键(Candidate key):在关系中没有一个真子集是超级键的一种超级键。
    • 一个关系可能有多个候选键。
  3. 主键(Primary key):被选中的候选键,用于在关系中唯一地标识元组。
    • 未被选作主键的候选键称为备用键。
    • 一个关系只能有一个主键。
  4. 复合键(Composite key):当一个键由多个属性组成时,我们称之为复合键。

图片 1.png

  1. 外键(Foreign key):一个关系中的一个或多个属性,必须匹配某个(可能是同一个)关系的候选键。

数据库语言

数据库有自己的“编程语言”,称为结构化查询语言 SQL (Structured Query Language)。
SQL有三个重要部分:

  • 数据定义语言(DDL):允许用户指定要存储在数据库中的数据的数据类型和结构以及约束。
  • 数据操作语言(DML):允许用户从数据库中插入、更新、删除和检索数据
  • 数据控制语言(Data Control Language, DCL):处理数据库系统的权限、权限和其他控制。

此外还有流控制(if, else, loops),这些内容包含在PL/SQL和Transact-SQL等扩展中。

SQL启动!

第一步:创建数据库(数据定义语言)

数据库的创建十分简单,在console中输入:

1
2
CREATE SCHEMA name;
CREATE DATABASE name;

这两种写法均可创建数据库
进入新建的数据库,我们可以新建表格,表格的建立也十分简单:

1
2
3
4
CREATE TABLE [IF NOT EXISTS] tablename (
column1 INT,
column2 VARCHAR(40)
);

这段DDL中,”[]”中的内容是选加的,表示如果数据库中不存在则建立
“tablename”为表格的名称。如果需要两个单词相连接,建议使用”word1_word2”的形式。也可以使用word1 word2的这种写法,但是这不是标准写法
“column1”, “column2”是属性的名称,后面跟着的是数据类型。在数据类型后面,可以添加”NOT NULL“,表示输入时这一列不能填入NULL值。除此之外,还可以添加”PRIMARY KEY“来设定主键

第二步:插入数据(数据操作语言)

我们使用INSERT指令来插入数据,对于刚刚创建的表格,我们可以:

1
2
3
INSERT INTO tablename VALUES
(12, '小马'),
(18, '企鹅');

默认来说,你输入数据的顺序,需要与表中的数据顺序相一致。但是也可以这么做:

1
2
3
INSERT INTO tablename (column2, column1) VALUES
('小马', 12),
('企鹅', 18);

这样定义了输入数据的顺序,就可以在底下按照自己的想法输入了。
如果想要删除数据,我们可以这样做:

1
DELETE FROM tablename WHERE column2 = '企鹅';

选定表,并使用WHERE确定需要删除的元素。
除此之外,我们可以使用UPDATE来对表进行更改:

1
UPDATE tablename set column1 = 19 WHERE column2 = '小马';

如果想添加主键或者是添加一列怎么办?使用ALTER就行啦:

1
2
3
ALTER TABLE tablename ADD PRIMARY KEY (column2);

ALTER TABLE tablename ADD 学号 INT;

第三步:未完待续…

SQL中的数据类型

数值类型:

  • 整数类型:
    • TINYINT
      • 存储 1 个字节的整数
      • 范围为 -128 到 127
    • SMALLINT
      • 存储 2 个字节的整数
      • 范围为 -32,768 到 32,767
    • MEDIUMINT
      • 存储 3 个字节的整数
      • 范围为 -8,388,608 到 8,388,607
    • INT
      • 存储 4 个字节的整数
      • 范围为 -2,147,483,648 到 2,147,483,647
    • BIGINT
      • 存储 8 个字节的整数
      • 范围为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
  • 小数类型:
    • FLOAT
      • 存储 4 个字节的浮点数
      • 精度为 7 位小数
    • DOUBLE
      • 存储 8 个字节的浮点数
      • 精度为 15 位小数
    • DECIMAL
      • 存储定点数
      • 可以指定精度和小数位数

字符类型:

  • 固定长度字符串类型:
    • CHAR(n):存储 n 个字符的固定长度字符串,不足 n 个字符时用空格填充。
  • 可变长度字符串类型:
    • VARCHAR(n):存储最多 n 个字符的可变长度字符串,实际存储空间取决于字符串的实际长度。
    • TEXT:存储长文本数据,最大长度为 65,535 个字节。

日期和时间类型:

  • DATE:存储日期数据,格式为 YYYY-MM-DD。
  • TIME:存储时间数据,格式为 HH:MM:SS。
  • DATETIME:存储日期和时间数据,格式为 YYYY-MM-DD HH:MM:SS。
  • TIMESTAMP:存储日期和时间数据,并带有时间戳,可以精确到微秒。

二进制类型:

  • BLOB:存储二进制数据,最大长度为 65,535 个字节。
  • TEXTBLOB:存储长二进制数据,最大长度为 2 GB。

未完待续…