1744 字
9 分钟
MySQL学习笔记1
2025-11-26
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, m 等 (一对一, 一对多, 多对多)

示例

设有如下 4 个实体集及其属性:
学生(学号、姓名、性别、班级、院系、绩点)
课程(课程编号、课程名称、学时、学分、开课院系)
教师(教师工号、姓名、性别、职称、所属部门)
院系(院系代码、院系名称、负责人)
  • E-R 图如下所示: E-R图1

2. MySQL创建数据库和表#

MySQL 是一个关系型数据库管理系统, 由瑞典 MySQL AB 公司开发, 目前属于 Oracle 公司. MySQL 是一种关联数据库管理系统, 使用标准的 SQL 数据语言形式, 关联数据库将数据保存在不同的表中, 而不是将所有数据放在一个大仓库内, 这样就增加了速度并提高了灵活性.

MySQL 这种所谓的”关系型”可以理解为”表格”的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格:表格示例

  • 表头(header): 每一列的名称
  • 列(col): 具有相同数据类型的数据的集合
  • 行(row): 每一行用来描述某条记录的具体信息
  • 值(value): 行的具体信息, 每个值必须与该列的数据类型相同
  • 键(key): 键的值在当前列中具有唯一性

登录MySQL

Terminal window
mysql -h 主机名 -u 用户名 -p

登录本机的 MySQL 数据库

Terminal window
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支持的数据类型

  • 数值型数据

    • 整数主要有 TINYINTSMALLINTMEDIUMINTINTBIGINT

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

  • 日期和时间型数据主要有 DATETIMEYEARDATETIMETIMESTAMP

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

    • 文本字符串主要包括 CHARVARCHARTINYTEXTTEXTMEDIUMTEXTLONGTEXT

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

示例 - 创建院系表

-- 在数据库 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-11-26
许可协议
CC BY-NC-SA 4.0