NOTE本笔记基于 MySql 8.0
”[ ]“为可选项
1. 数据库概述
- 数据 (Data) : 数据是对客观事物的符号表示 , 是数据库中存储的基本对象
- 数据库 (Database) : 数据库是指长期存储在计算机内的 , 有组织的 , 可共享的数据集合
- 数据库管理系统 (DBMS) : 数据库管理系统是一个负责存取数据 , 维护和管理数据库的系统软件
- 数据库系统 (DBS) : 一般由数据库 (DB) , 数据库管理系统 (DBMS) , 应用系统和数据库管理员 (DBA) 构成
1.1 数据库的类别
- 关系型数据库 (RDBMS) : 采用关系模型来组织数据的数据库 , 是由若干张二维表格组成的集合
- 非关系型数据库 (NoSQL) : 非关系型数据库 , 泛指非关系型的数据库
1.2 RDBDMS的特点
- 数据以表格的形式出现
- 每行为各种记录名称
- 每列为记录名称所对应的数据域
- 许多的行和列组成一张表单
- 若干的表单组成database
1.3 RDBMS 术语
- 数据库 : 数据库是一些关联表的集合
- 数据表 : 表是数据的矩阵 . 表中每一列称为字段 , 每一行称为记录
- 列 : 一列包含了相同类型的数据 , 例如邮政编码的数据
- 行 : 一行是一组相关的数据 , 例如一条用户订阅的数据
- 冗余 : 存储两倍数据 , 降低了性能 , 但提高了数据的安全性
- 主键 : 主键是唯一的 . 一个数据表中只能包含一个主键 . 主键可以是自然主键 , 也可以是人为添加的主键
- 外键 : 外键用于关联两个表
- 复合键 : 复合键将多个列作为一个索引键 , 一般用于复合索引
- 索引 : 使用索引可快速访问数据库表中的特定信息 . 索引是对数据库表中一列或多列的值进行排序的一种结构
- 参照完整性 : 参照的完整性要求关系中不允许引用不存在的实体 . 与实体完整性是关系模型必须满足的完整性约束条件 , 目的是保证数据的一致性
- 属性 (字段) : 二维表格中的一列称为一个属性 , 每一列都有一个属性名 ; 在关系数据库中 , 一列称为一个字段 , 每个字段都有字段名称
- 元组 (记录) : 二维表格中的一行称为一个元组 , 每一行都有一个元组名 ; 在关系数据库中 , 一行称为一个记录 , 每个记录都有记录名称
- 关系 (表) : 二维表格称为一个关系 , 每一个关系都有一个关系名 ; 在关系数据库中 , 一张表称为一个关系 , 每个关系都有关系名称
- 分量 : 记录中的一个字段值称为一个分量 . 关系数据库要求每一个分量都必须是不可分的数据项 , 即不允许表中还有表
- 域 : 域是指属性的取值范围 , 例如整数 , 实数 , 字符等
1.4 数据库管理系统 (DBMS) 的主要功能
- 数据定义功能 : 数据定义语言 (DDL) , 用户通过它可以方便地在数据库中定义数据对象 (包括表 , 视图 , 索引 , 存储过程等) 和数据的完整性约束等
- 数据操纵语言 (DML) , 用户可以通过它对数据库的数据进行增加 , 删除 , 修改和查询操作 , 简称为 “增 , 删 , 改 , 查询” , 对应于 SQL 语言的4个命令 , 即 INSERT , DELETE , UPDATE , SELECT
- 数据控制语言 (DCL) , 用户可以通过它完成对用户访问数据权限的授予和撤消 , 即安全性控制 ; 解决多用户对数据库的并发使用所产生的事务处理问题 , 即并发控制 ; 数据库的转储 , 恢复功能 ; 数据库的性能监视 , 分析等功能
2. 绘制 E-R 图
实体联系 (Entity-Relationship , E-R) 方法是使用最广泛的概念模型表示方法 , 该方法使用 E-R 图来描述现实世界中实体集及实体集之间的联系 . E-R 图是由实体集 , 属性和联系三种基本要素构成的.
- E-R 图如下所示:

2.1 E-R 图的基本元素
- 实体集: 用矩形表示
- 属性: 用椭圆表示, 并用线条将其与对应的实体集连接起来
- 联系:用菱形表示, 并用线条将其与有关的实体集连接起来, 同时标注类型
- 联系类型: 用文字标注在菱形的中间, 表示联系的类型, 例如:
1:1, 1:n, m:n等 (一对一, 一对多, 多对多)
示例
设有如下 4 个实体集及其属性:学生(学号、姓名、性别、班级、院系、绩点)课程(课程编号、课程名称、学时、学分、开课院系)教师(教师工号、姓名、性别、职称、所属部门)院系(院系代码、院系名称、负责人)2.2 E-R 图的模型类别
逻辑模型: 面向数据库的逻辑结构 - 层次模型 - 网状模型 - 关系模型
关系模型: 用二维表格来表示实体集以及实体集之间的联系
3. 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;参考:
