I'm Aron

MySQL 基础(一):数据库概念、SQL 分类与 DDL

1667 字
8 分钟
MySQL 基础(一):数据库概念、SQL 分类与 DDL

1. 数据库与 MySQL 基本概念#

1.1 DB、DBMS 与 SQL#

概念全称含义
DBDatabase按一定结构组织、长期存储的数据集合
DBMSDatabase Management System创建、管理和操作数据库的软件,如 MySQL
SQLStructured Query Language操作关系型数据库的标准语言

MySQL 是关系型数据库管理系统。关系型数据库以二维表组织数据:

  • 一行称为一条记录。
  • 一列称为一个字段。
  • 表之间可以通过主键、外键建立关系。
  • 一个 MySQL 服务实例可以管理多个数据库,一个数据库可以包含多张表。

1.2 MySQL 版本#

MySQL 常见版本包括社区版和企业版。本文MySQL 8.0.26 社区版,本文 SQL 以 MySQL 8.0 语法为主。

1.3 关系型数据库的核心特点#

  • 数据结构统一,便于查询和维护。
  • 支持约束,以保证数据的正确性、有效性和完整性。
  • 支持事务,以保证一组操作要么全部成功,要么全部失败。
  • 使用 SQL 作为主要操作语言。

2. MySQL 的启动、连接与基本操作#

2.1 Windows 服务启动与停止#

以管理员身份打开命令行:

Terminal window
net start mysql80
net stop mysql80

mysql80 是资料安装示例中的服务名,实际名称取决于安装配置。

2.2 命令行连接#

Terminal window
mysql -h 127.0.0.1 -P 3306 -u root -p

参数说明:

参数作用
-hMySQL 服务所在主机;本机连接时可以省略
-P端口,默认是 3306;注意为大写 P
-u用户名
-p提示输入密码;不要直接把密码写在命令中

常用退出命令:

EXIT;
-- 或
QUIT;

2.3 连接后先检查环境#

SELECT VERSION();
SELECT DATABASE();
SHOW DATABASES;
SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'collation_server';

3. SQL 通用语法与分类#

3.1 通用语法#

  • SQL 可以写成一行或多行,通常以分号 ; 结束。
  • SQL 关键字不区分大小写,但推荐关键字大写、对象名小写。
  • 使用空格和缩进提高可读性。
  • 字符串和日期通常使用单引号,例如 '张三''2026-08-07'
  • 标识符与字符串含义不同。必要时可用反引号包围表名或字段名,例如 `order`

注释:

-- 单行注释:双横线后应有空格
# MySQL 风格单行注释
/* 多行注释 */

3.2 SQL 分类#

分类全称用途常见关键字
DDLData Definition Language定义数据库对象CREATEALTERDROPTRUNCATE
DMLData Manipulation Language对表中数据增删改INSERTUPDATEDELETE
DQLData Query Language查询数据SELECT
DCLData Control Language用户和权限控制CREATE USERGRANTREVOKE
TCLTransaction Control Language控制事务COMMITROLLBACKSAVEPOINT

4. DDL:数据库和表结构#

4.1 数据库操作#

-- 查看所有数据库
SHOW DATABASES;
-- 创建数据库;不存在时才创建
CREATE DATABASE IF NOT EXISTS mysql_learn
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
-- 使用数据库
USE mysql_learn;
-- 查看当前数据库
SELECT DATABASE();
-- 查看建库语句
SHOW CREATE DATABASE mysql_learn;
-- 删除数据库;谨慎执行
DROP DATABASE IF EXISTS mysql_learn;

utf8mb4 可以完整保存 Unicode 字符。排序规则决定字符串的比较和排序方式,实际项目应按业务要求统一选择。

4.2 表的创建与查看#

CREATE TABLE employee (
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
work_no VARCHAR(10) NOT NULL UNIQUE COMMENT '工号',
name VARCHAR(50) NOT NULL COMMENT '姓名',
gender CHAR(1) COMMENT '性别',
age TINYINT UNSIGNED COMMENT '年龄',
id_card CHAR(18) UNIQUE COMMENT '身份证号',
salary DECIMAL(10, 2) NOT NULL DEFAULT 0.00 COMMENT '薪资',
entry_date DATE COMMENT '入职日期',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
CONSTRAINT chk_employee_age CHECK (age IS NULL OR age <= 120)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COMMENT = '员工表';
SHOW TABLES;
DESC employee;
SHOW CREATE TABLE employee;

4.3 常用数据类型#

4.3.1 整数类型#

类型字节有符号范围无符号范围常见用途
TINYINT1-128 ~ 1270 ~ 255状态、小范围整数、年龄
SMALLINT2-32768 ~ 327670 ~ 65535较小计数
MEDIUMINT3-8388608 ~ 83886070 ~ 16777215中等范围整数
INT / INTEGER4-2³¹ ~ 2³¹-10 ~ 2³²-1常规整数、编号
BIGINT8-2⁶³ ~ 2⁶³-10 ~ 2⁶⁴-1大型系统主键、超大计数

UNSIGNED 表示不允许负数,可扩大正数范围:

age TINYINT UNSIGNED

4.3.2 小数类型#

类型特点适用场景
FLOAT单精度近似值对精度要求不高的测量值
DOUBLE双精度近似值更大范围的近似计算
DECIMAL(M,D)精确定点数金额、财务数据、需要精确小数的场景

M 是总有效数字位数,D 是小数位数:

price DECIMAL(10, 2)

金额不要优先使用 FLOATDOUBLE,因为二进制浮点数可能产生精度误差。

4.3.3 字符串与二进制类型#

类型特点适用场景
CHAR(n)定长;不足长度时内部按定长处理性别码、固定长度编号
VARCHAR(n)变长;n 表示最大字符数姓名、地址、可变长度文本
TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT不同容量的长文本文章、备注、长描述
TINYBLOB / BLOB / MEDIUMBLOB / LONGBLOB不同容量的二进制数据二进制内容

选择建议:

  • 手机号、身份证号、工号不是用于算术运算的数字,应使用字符类型。
  • CHAR(11) 适合固定长度手机号;姓名通常使用 VARCHAR
  • 大型图片、视频通常保存到对象存储或文件系统,数据库保存路径和元数据。
  • VARCHAR 能保存的实际字节数受字符集和行大小限制,不能只看声明的最大字符数。

4.3.4 日期时间类型#

类型常用格式说明
DATEYYYY-MM-DD日期
TIMEHH:MM:SS时间或持续时间
YEARYYYY年份
DATETIMEYYYY-MM-DD HH:MM:SS日期和时间,适合业务时间
TIMESTAMPYYYY-MM-DD HH:MM:SS时间戳,常用于记录创建/更新时间

TIMESTAMP 的显示会受会话时区影响;DATETIME 保存的是给定的日期时间值。跨时区系统应明确统一的时区策略。

4.4 修改表结构#

-- 添加字段
ALTER TABLE employee
ADD COLUMN nickname VARCHAR(30) COMMENT '昵称';
-- 修改字段类型或约束
ALTER TABLE employee
MODIFY COLUMN nickname VARCHAR(50) NOT NULL COMMENT '昵称';
-- 同时修改字段名与定义
ALTER TABLE employee
CHANGE COLUMN nickname display_name VARCHAR(50) COMMENT '显示名';
-- 删除字段
ALTER TABLE employee
DROP COLUMN display_name;
-- 修改表名
ALTER TABLE employee
RENAME TO emp;

4.5 删除、清空与区别#

-- 删除表结构和数据
DROP TABLE IF EXISTS emp;
-- 保留表结构,快速清空全表数据
TRUNCATE TABLE emp;
-- 保留表结构,按条件删除数据
DELETE FROM emp WHERE id = 10;
操作删除结构支持 WHERE事务与回滚特征常见用途
DROP TABLEDDL,通常隐式提交不再需要该表
TRUNCATE TABLEDDL,通常隐式提交快速清空整表
DELETEDML,可在事务中回滚按条件删除记录

执行 DROPTRUNCATE 或无 WHEREDELETE 前,应先确认数据库、表名和数据备份。


评论区

文章目录