NOTE本笔记基于 MySql 8.0 ”[ ]“为可选项
1. 数据库概述
- 数据库(Database) : 按照数据结构来组织、存储和管理数据的仓库
- 数据库管理系统(DBMS): 操纵和管理数据库的大型软件
- 数据库系统(DBS): 由软件、数据库和数据管理员组成
1.1 数据库的类别
- 关系型数据库(RDBMS): 采用关系模型来组织数据的数据库
- 非关系型数据库(NoSQL): 非关系型数据库,泛指非关系型的数据库
1.2 RDBDMS的特点
- 数据以表格的形式出现
- 每行为各种记录名称
- 每列为记录名称所对应的数据域
- 许多的行和列组成一张表单
- 若干的表单组成database
1.3 RDBMS 术语
- 数据库: 数据库是一些关联表的集合
- 数据表: 表是数据的矩阵. 表中每一列称为字段、每一行称为记录
- 列: 一列包含了相同类型的数据, 例如邮政编码的数据
- 行: 一行是一组相关的数据, 例如一条用户订阅的数据
- 冗余: 存储两倍数据, 降低了性能, 但提高了数据的安全性
- 主键: 主键是唯一的. 一个数据表中只能包含一个主键. 主键可以是自然主键, 也可以是人为添加的主键
- 外键: 外键用于关联两个表
- 复合键: 复合键将多个列作为一个索引键, 一般用于复合索引
- 索引: 使用索引可快速访问数据库表中的特定信息. 索引是对数据库表中一列或多列的值进行排序的一种结构
- 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体. 与实体完整性是关系模型必须满足的完整性约束条件, 目的是保证数据的一致性
1.4 绘制 E-R 图
实体联系 (Entity-Relationship, E-R) 方法是使用最广泛的概念模型表示方法, 该方法使用 E-R 图来描述现实世界中实体集及实体集之间的联系.
- 实体集: 用矩形表示
- 属性: 用椭圆表示, 并用线条将其与对应的实体集连接起来
- 联系:用菱形表示, 并用线条将其与有关的实体集连接起来, 同时标注类型
- 联系类型: 用文字标注在菱形的中间, 表示联系的类型, 例如: 1<1>1>, 1
, m 等 (一对一, 一对多, 多对多)
示例
设有如下 4 个实体集及其属性:学生(学号、姓名、性别、班级、院系、绩点)课程(课程编号、课程名称、学时、学分、开课院系)教师(教师工号、姓名、性别、职称、所属部门)院系(院系代码、院系名称、负责人)- E-R 图如下所示:

2. MySQL创建数据库和表
MySQL 是一个关系型数据库管理系统, 由瑞典 MySQL AB 公司开发, 目前属于 Oracle 公司. MySQL 是一种关联数据库管理系统, 使用标准的 SQL 数据语言形式, 关联数据库将数据保存在不同的表中, 而不是将所有数据放在一个大仓库内, 这样就增加了速度并提高了灵活性.
MySQL 这种所谓的”关系型”可以理解为”表格”的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格:
- 表头(header): 每一列的名称
- 列(col): 具有相同数据类型的数据的集合
- 行(row): 每一行用来描述某条记录的具体信息
- 值(value): 行的具体信息, 每个值必须与该列的数据类型相同
- 键(key): 键的值在当前列中具有唯一性
登录MySQL
mysql -h 主机名 -u 用户名 -p登录本机的 MySQL 数据库
mysql -u root -p2.1 创建配置数据库
基本语法
CREATE DATABASE [IF NOT EXISTS] database_name [CHARACTER SET charset_name] [COLLATE collation_name];示例 - 创建数据库
-- 创建一个名为mytestdb的数据库,采用字符集GB2312和校对规则 gb2312_chinese_ciCREATE DATABASE mytestdbCHARACTER SET GB2312COLLATE gb2312_chinese_ci;-- 如果不存在数据库 mytestdb,则创建该数据库:CREATE DATABASE IF NOT EXISTS mytestdb;示例 - 使用与显示数据库名
-- 使用数据库 mytestdbUSE mytestdb;
-- 显示当前使用的数据库SELECT DATABASE();
-- 显示所有数据库SHOW DATABASES;示例 - 修改数据库字符集
-- 修改数据库 mytestdb 的字符集为 GBK,校对规则为 gbk_chinese_ciALTER DATABASE mytestdbCHARACTER SET GBKCOLLATE gbk_chinese_ci;2.2 使用合适的数据类型创建表
MySQL支持的数据类型
-
数值型数据
-
整数主要有
TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT -
实数主要有单精度浮点数
FLOAT、双精度浮点数DOUBLE和定点数DECIMAL
-
-
日期和时间型数据主要有
DATE、TIME、YEAR、DATETIME和TIMESTAMP- 不同类型表示的时间内容不同,取值范围也不同,而且占用的字节数也不一样
-
字符串型数据
-
文本字符串主要包括
CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。 -
二进制字符串主要包括
BINARY(定长二进制字符串)、VARBINARY(变长二进制字符串) 和BLOB(二进制大对象,包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB)
-
示例 - 创建院系表
-- 在数据库 scoredb 中创建院系表 departmentCREATE TABLE department(deptno CHAR(3) NOT NULL PRIMARY KEY ,deptname VARCHAR(50) UNIQUE,director VARCHAR(50) DEFAULT '院长');2.3 修改表结构
ALTER TABLE 语句用于修改已存在的表的结构,包括添加、修改或删除字段、修改表名、添加或删除约束等。
基本语法
ALTER TABLE table_name action_specification;示例 - 修改表结构
-- 例 1: 修改字段数据类型(MODIFY)-- 将 sfamily 表中的联系电话 telephone 字段的数据类型由 CHAR(11) 修改为 VARCHAR(20)ALTER TABLE sfamily MODIFY telephone VARCHAR(20);
-- 例 2: 修改字段名和数据类型(CHANGE)-- 将 sfamily 表中的字段名称由 income 修改为 annincome,数据类型修改为 INTALTER TABLE sfamily CHANGE income annincome INT;
-- 例 3: 添加字段(ADD)-- 在 sfamily 表中添加字段 sid (作为第一个字段),设置 INT 类型,NOT NULL, UNIQUE, AUTO_INCREMENT 约束ALTER TABLE sfamily ADD sid INT NOT NULL UNIQUE AUTO_INCREMENT FIRST;
-- 例 4: 删除字段(DROP)-- 将 sfamily 表中的 sid 字段删除ALTER TABLE sfamily DROP sid;2.4 删除表和数据库
基本语法
-- 删除数据表DROP TABLE table_name [, table_name2, ...]; -- 直接删除表,不检查是否存在DROP TABLE [IF EXISTS] table_name [, table_name2, ...]; -- 会检查是否存在,如果存在则删除
-- 删除数据库DROP DATABASE database_name; -- 直接删除数据库,不检查是否存在DROP DATABASE [IF EXISTS] database_name; -- 会检查是否存在,如果存在则删除示例 - 删除表和数据库
-- 例 1: 删除数据表-- 将数据表 newfamily1 和 newfamily2 删除DROP TABLE newfamily1, newfamily2;
-- 例 2: 删除数据库-- 删除如果存在的数据库 mytestdbDROP DATABASE IF EXISTS mytestdb;参考: