2402 字
12 分钟
MySQL学习笔记1
2025-12-14
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) 的主要功能#

  1. 数据定义功能 : 数据定义语言 (DDL) , 用户通过它可以方便地在数据库中定义数据对象 (包括表 , 视图 , 索引 , 存储过程等) 和数据的完整性约束等
  2. 数据操纵语言 (DML) , 用户可以通过它对数据库的数据进行增加 , 删除 , 修改和查询操作 , 简称为 “增 , 删 , 改 , 查询” , 对应于 SQL 语言的4个命令 , 即 INSERT , DELETE , UPDATE , SELECT
  3. 数据控制语言 (DCL) , 用户可以通过它完成对用户访问数据权限的授予和撤消 , 即安全性控制 ; 解决多用户对数据库的并发使用所产生的事务处理问题 , 即并发控制 ; 数据库的转储 , 恢复功能 ; 数据库的性能监视 , 分析等功能

2. 绘制 E-R 图#

实体联系 (Entity-Relationship , E-R) 方法是使用最广泛的概念模型表示方法 , 该方法使用 E-R 图来描述现实世界中实体集及实体集之间的联系 . E-R 图是由实体集 , 属性和联系三种基本要素构成的.

  • E-R 图如下所示: E-R图1

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 -p

2.1 创建配置数据库#

基本语法

CREATE DATABASE [IF NOT EXISTS] database_name
[CHARACTER SET charset_name]
[COLLATE collation_name];

示例 - 创建数据库

-- 创建一个名为mytestdb的数据库,采用字符集GB2312和校对规则 gb2312_chinese_ci
CREATE DATABASE mytestdb
CHARACTER SET GB2312
COLLATE gb2312_chinese_ci;
-- 如果不存在数据库 mytestdb,则创建该数据库:
CREATE DATABASE IF NOT EXISTS mytestdb;

示例 - 使用与显示数据库名

-- 使用数据库 mytestdb
USE mytestdb;
-- 显示当前使用的数据库
SELECT DATABASE();
-- 显示所有数据库
SHOW DATABASES;

示例 - 修改数据库字符集

-- 修改数据库 mytestdb 的字符集为 GBK,校对规则为 gbk_chinese_ci
ALTER DATABASE mytestdb
CHARACTER SET GBK
COLLATE gbk_chinese_ci;

2.2 使用合适的数据类型创建表#

MySQL支持的数据类型

  • 数值型数据

    • 整数主要有 TINYINT , SMALLINT , MEDIUMINT , INTBIGINT

    • 实数主要有单精度浮点数 FLOAT , 双精度浮点数 DOUBLE 和定点数 DECIMAL

  • 日期和时间型数据主要有 DATE , TIME , YEAR , DATETIMETIMESTAMP

    • 不同类型表示的时间内容不同 , 取值范围也不同 , 而且占用的字节数也不一样
  • 字符串型数据

    • 文本字符串主要包括 CHAR , VARCHAR , TINYTEXT , TEXT , MEDIUMTEXTLONGTEXT .

    • 二进制字符串主要包括 BINARY (定长二进制字符串) , VARBINARY (变长二进制字符串) 和 BLOB (二进制大对象 , 包括 TINYBLOB , BLOB , MEDIUMBLOBLONGBLOB)

示例 - 创建院系表

-- 在数据库 scoredb 中创建院系表 department
CREATE 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,数据类型修改为 INT
ALTER 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: 删除数据库
-- 删除如果存在的数据库 mytestdb
DROP DATABASE IF EXISTS mytestdb;

参考

MySQL学习笔记1
https://blog.chuwu.top/posts/sql/mysql1/
作者
ChuwuYo
发布于
2025-12-14
许可协议
CC BY-NC-SA 4.0