[数据库] MySQL 数据库 & 数据表基础操作总结

450 0
Honkers 2026-6-16 00:18:50 来自手机 | 显示全部楼层 |阅读模式

一、前言

MySQL 是主流关系型数据库,日常开发、运维最基础的操作就是**数据库(库)数据表(表)**的增删改查。本文分为两大模块:数据库操作数据表操作,包含完整语法、场景案例、字符集/校验规则、备份恢复、存储引擎、易错点总结。


第一部分:MySQL 数据库(库)操作

1.1 创建数据库

1.1.1 标准语法

  1. CREATE DATABASE [IF NOT EXISTS] 数据库名
  2. [DEFAULT CHARACTER SET 字符集]
  3. [DEFAULT COLLATE 校验规则];
复制代码

语法解析

  1. [IF NOT EXISTS]:可选,判断数据库不存在才创建,避免重复创建报错(生产必加)。
  2. CHARACTER SET:指定数据库字符集,决定数据库支持的文字(中文、英文、特殊符号等)。
  3. COLLATE:指定字符集校验规则,控制字符串比较、排序是否区分大小写。
  4. [] 代表可选参数,MySQL 关键字建议大写,增强可读性。

1.1.2 实战案例(经典示例)

案例1:最简单创建数据库(使用系统默认配置)
  1. -- 创建数据库 test_db,使用MySQL默认字符集、校验规则
  2. CREATE DATABASE test_db;
复制代码

MySQL 5.7 默认字符集:utf8;MySQL 8.0 默认字符集:utf8mb4(推荐生产使用,支持emoji)。

案例2:指定字符集创建数据库
  1. -- 创建数据库 db_utf8,指定字符集为 utf8
  2. CREATE DATABASE db_utf8 DEFAULT CHARACTER SET utf8;
复制代码
案例3:同时指定字符集 + 校验规则
  1. -- 字符集utf8,校验规则utf8_general_ci(不区分大小写)
  2. CREATE DATABASE db_ci DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
  3. -- 字符集utf8,校验规则utf8_bin(区分大小写)
  4. CREATE DATABASE db_bin DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
复制代码

1.2 字符集 & 校验规则 深度解析

1.2.1 常用查询指令

  1. -- 查看当前数据库默认字符集
  2. SHOW VARIABLES LIKE 'character_set_database';
  3. -- 查看当前数据库默认校验规则
  4. SHOW VARIABLES LIKE 'collation_database';
  5. -- 查看MySQL所有支持的字符集
  6. SHOW CHARSET;
  7. -- 查看MySQL所有支持的校验规则
  8. SHOW COLLATION;
复制代码

1.2.2 两大核心校验规则对比(重点)

校验规则直接影响查询、排序结果,是高频易错点。

校验规则特点场景
utf8_general_ci不区分大小写用户名、普通文本查询(最常用)
utf8_bin二进制比较,区分大小写验证码、账号密码、敏感字符串

1.2.3 案例演示:大小写区分效果

步骤1:分别创建两个不同校验规则的库
  1. -- 库1:不区分大小写
  2. CREATE DATABASE db_ci COLLATE utf8_general_ci;
  3. USE db_ci;
  4. CREATE TABLE user(name VARCHAR(20));
  5. INSERT INTO user VALUES ('a'),('A'),('b'),('B');
  6. -- 库2:区分大小写
  7. CREATE DATABASE db_bin COLLATE utf8_bin;
  8. USE db_bin;
  9. CREATE TABLE user(name VARCHAR(20));
  10. INSERT INTO user VALUES ('a'),('A'),('b'),('B');
复制代码
步骤2:查询测试
  1. -- 切换到不区分大小写库,查询 name='a'
  2. USE db_ci;
  3. SELECT * FROM user WHERE name = 'a';
  4. -- 结果:同时查出 a 和 A
  5. -- 切换到区分大小写库,查询 name='a'
  6. USE db_bin;
  7. SELECT * FROM user WHERE name = 'a';
  8. -- 结果:仅查出小写 a
复制代码
步骤3:排序测试
  1. -- 不区分大小写排序:a、A、b、B 混排
  2. USE db_ci;
  3. SELECT * FROM user ORDER BY name;
  4. -- 区分大小写排序:先大写字母,后小写字母
  5. USE db_bin;
  6. SELECT * FROM user ORDER BY name;
复制代码

📌 易错点:团队协作、项目迁移时,库/表校验规则不一致会导致查询结果异常,统一规范很重要。

1.3 查看数据库

1.3.1 查看所有数据库

  1. SHOW DATABASES;
复制代码

1.3.2 查看数据库创建语句(查看字符集、校验规则)

  1. SHOW CREATE DATABASE 数据库名;
  2. -- 示例
  3. SHOW CREATE DATABASE db_utf8;
复制代码
结果解析
  1. 数据库名外层 ` 反引号:用于区分数据库名和MySQL关键字,如果库名是关键字必须加。
  2. /*!40100 ... */:不是普通注释,代表MySQL版本大于4.01时执行内部语句

1.4 修改数据库

仅支持修改字符集校验规则,无法修改数据库名(低版本MySQL不支持直接改名)。

1.4.1 语法

  1. ALTER DATABASE 数据库名
  2. [DEFAULT CHARACTER SET 新字符集]
  3. [DEFAULT COLLATE 新校验规则];
复制代码

1.4.2 实战案例

  1. -- 将 db_utf8 字符集修改为 gbk
  2. ALTER DATABASE db_utf8 DEFAULT CHARACTER SET gbk;
  3. -- 同时修改字符集+校验规则
  4. ALTER DATABASE db_ci DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
复制代码

📌 补充知识点:修改数据库字符集不会同步修改已有数据表,已有表需要单独修改。

1.5 删除数据库

1.5.1 语法

  1. DROP DATABASE [IF EXISTS] 数据库名;
复制代码
  • IF EXISTS:数据库存在才删除,避免不存在时报错。

1.5.2 案例 & 风险提示

  1. -- 安全删除数据库(推荐)
  2. DROP DATABASE IF EXISTS test_db;
复制代码

⚠️ 高危操作

  1. 删除数据库会级联删除库内所有数据表、数据、索引,无法恢复(无备份前提下)。
  2. 生产环境严禁随意执行 DROP DATABASE,删除前务必备份。

1.6 数据库备份与恢复(运维必备)

备份恢复使用 mysqldump 工具,在系统命令行执行(不是MySQL客户端内)。

1.6.1 整库备份

语法
  1. mysqldump -u用户名 -p密码 -B 数据库名 > 备份文件路径.sql
复制代码
示例
  1. # 备份 db_utf8 库到 D 盘
  2. mysqldump -uroot -p123456 -B db_utf8 > D:/mysql_backup/db_utf8.sql
复制代码
  • -B:代表备份整个数据库,恢复时无需手动建库。

1.6.2 单表/多表备份

  1. # 仅备份库中某几张表(不加 -B)
  2. mysqldump -uroot -p123456 数据库名 表名1 表名2 > 备份路径.sql
复制代码

1.6.3 多库同时备份

  1. # 一次性备份多个数据库
  2. mysqldump -uroot -p123456 -B 库1 库2 库3 > D:/all_db.sql
复制代码

1.6.4 数据恢复(MySQL客户端内执行)

  1. -- 导入sql文件完成恢复
  2. SOURCE D:/mysql_backup/db_utf8.sql;
复制代码

1.6.5 备份易错点总结

  1. 不带 -B 备份的文件:恢复前必须手动创建空数据库,并进入该库再执行 source。
  2. 路径不要包含中文、空格,否则恢复失败。
  3. 大数据库建议分表备份,避免单文件过大。

1.7 查看MySQL连接状态

排查数据库卡顿、非法连接常用指令:

  1. SHOW PROCESSLIST;
复制代码

字段说明

  • Id:连接ID
  • User:登录用户
  • Host:客户端地址
  • db:当前操作的数据库
  • Command:执行的操作(Sleep=空闲连接,Query=正在执行SQL)

用途:发现陌生IP、陌生用户连接,说明数据库可能被入侵;连接数过多会导致数据库卡顿。


第二部分:MySQL 数据表(表)操作

数据表隶属于数据库,操作表前必须先进入对应数据库

  1. USE 数据库名;
复制代码

2.1 创建数据表

2.1.1 标准语法

  1. CREATE TABLE 表名 (
  2. 字段名1 数据类型 [字段约束/注释],
  3. 字段名2 数据类型 [字段约束/注释],
  4. ...
  5. )
  6. [DEFAULT CHARACTER SET 字符集]
  7. [COLLATE 校验规则]
  8. [ENGINE 存储引擎]
  9. [COMMENT '表注释'];
复制代码

语法解析

  1. 字段:列名 + 数据类型(必填)。
  2. COMMENT:字段/表注释,提升可读性(开发规范必加)。
  3. 字符集/校验规则:不指定则继承所在数据库配置
  4. ENGINE:指定表的存储引擎(MySQL核心,下文详解)。

2.1.2 经典实战案例

创建一张用户信息表,包含常用字段、注释、存储引擎:

  1. -- 先进入数据库
  2. USE db_utf8;
  3. -- 创建用户表 user_info
  4. CREATE TABLE user_info (
  5. id INT COMMENT '用户ID,整型',
  6. username VARCHAR(30) COMMENT '用户名',
  7. password CHAR(32) COMMENT '密码,MD5加密后32位',
  8. age TINYINT COMMENT '年龄',
  9. create_time DATE COMMENT '账号创建日期'
  10. )
  11. ENGINE = InnoDB
  12. DEFAULT CHARACTER SET utf8
  13. COMMENT = '系统用户信息表';
复制代码

2.2 存储引擎简介(重点)

MySQL 主流两大存储引擎:InnoDB、MyISAM,创建表时通过 ENGINE 指定。

2.2.1 文件存储区别

数据表会在 MySQL 数据目录生成对应文件:

  1. MyISAM(老版本默认)
    • xxx.frm:表结构文件
    • xxx.MYD:数据文件
    • xxx.MYI:索引文件
  2. InnoDB(MySQL5.5+ 默认,生产首选)
    • xxx.frm:表结构文件
    • xxx.ibd:数据+索引合并文件

2.2.2 引擎对比 & 选型

存储引擎事务支持行锁/表锁外键适用场景
InnoDB✅ 支持事务行锁✅ 支持外键电商、后台系统、需要事务的业务(生产首选
MyISAM❌ 不支持事务表锁❌ 不支持外键纯查询、静态数据、日志表(读写少)

2.3 查看表结构

2.3.1 精简查看(常用)

  1. DESC 表名;
  2. -- 等价写法
  3. DESCRIBE 表名;
复制代码

2.3.2 字段含义说明

执行 DESC user_info 后展示字段:

  1. Field:字段名
  2. Type:字段数据类型
  3. Null:是否允许为空(YES/NO)
  4. Key:索引类型
  5. Default:字段默认值
  6. Extra:额外属性(自增、备注等)

2.3.3 查看完整建表语句

  1. SHOW CREATE TABLE 表名;
复制代码

2.4 修改数据表结构(高频操作)

实际开发中经常新增字段、修改字段、删除字段、重命名表/字段,统一使用 ALTER TABLE。

2.4.1 新增字段 ADD

语法:ALTER TABLE 表名 ADD 字段名 数据类型 [注释] [位置];

  • 位置:AFTER 已有字段(指定在某个字段后),默认追加到最后。
  1. -- 给 user_info 新增 头像路径 字段,放在 create_time 后面
  2. ALTER TABLE user_info
  3. ADD avatar VARCHAR(100) COMMENT '头像文件路径' AFTER create_time;
复制代码

2.4.2 修改字段类型/约束 MODIFY

只修改字段类型、长度、是否为空,不修改字段名。

  1. -- 将 username 字段长度从30修改为50
  2. ALTER TABLE user_info MODIFY username VARCHAR(50) COMMENT '用户名';
复制代码

⚠️ MODIFY 会完全覆盖字段的旧定义(包括 NULL/NOT NULL、DEFAULT、COMMENT 等),必须在新语句中重新声明所有需要的属性。

2.4.3 修改字段名 + 类型 CHANGE

必须同时写新字段名 + 完整数据类型

  1. -- 将 username 改名为 nick_name,类型保持不变
  2. ALTER TABLE user_info CHANGE username nick_name VARCHAR(50) COMMENT '昵称';
复制代码

2.4.4 删除字段 DROP

⚠️ 高危操作:删除字段会清空该列所有数据,谨慎使用!

  1. -- 删除 age 字段
  2. ALTER TABLE user_info DROP COLUMN age;
复制代码

2.4.5 修改表名 RENAME

  1. -- 将 user_info 重命名为 sys_user
  2. ALTER TABLE user_info RENAME TO sys_user;
  3. -- TO 可以省略,等价写法
  4. ALTER TABLE sys_user RENAME user_info;
  5. RENAME TABLE user_info TO sys_user;
复制代码

2.5 删除数据表

2.5.1 语法

  1. -- 安全删除(推荐,表不存在不报错)
  2. DROP TABLE [IF EXISTS] 表名1, 表名2;
  3. -- 直接删除
  4. DROP TABLE 表名;
复制代码

2.5.2 示例 & 注意事项

  1. -- 单表删除
  2. DROP TABLE IF EXISTS user_info;
  3. -- 一次性删除多张表
  4. DROP TABLE IF EXISTS table_a, table_b;
复制代码

⚠️ 易错点:删除表 = 清空表结构 + 所有数据,删除前务必确认、备份。


三、整体易错点 & 开发规范总结

3.1 数据库操作规范

  1. 建库统一加上 IF NOT EXISTS,删库统一加上 IF EXISTS,避免批量脚本报错。
  2. 生产环境优先使用 utf8mb4 字符集(支持emoji、全量中文)。
  3. 校验规则业务统一:通用业务用 utf8_general_ci,密码/验证码用 utf8_bin。
  4. 禁止线上直接执行 DROP DATABASE,删除前必须备份。

3.2 数据表操作规范

  1. 所有字段、表必须加 COMMENT 注释,方便后期维护。
  2. 生产表默认使用 InnoDB 存储引擎。
  3. 修改/删除字段前,先在测试环境验证,避免线上数据丢失。
  4. 操作表前务必执行 USE 数据库名;,防止操作错库。

3.3 备份恢复规范

  1. 重要数据库定时自动备份,保留多份历史备份文件。
  2. 备份文件名带上时间,例如 db_20260610.sql。
  3. 跨版本迁移数据库,优先使用 mysqldump 方式迁移。

四、附录:常用指令速查表

功能SQL 指令
创建库CREATE DATABASE 库名 CHARSET utf8;
查看所有库SHOW DATABASES;
进入库USE 库名;
修改库字符集ALTER DATABASE 库名 CHARSET gbk;
删除库DROP DATABASE IF EXISTS 库名;
创建表CREATE TABLE 表名(...);
查看表结构DESC 表名;
新增字段ALTER TABLE 表名 ADD 字段 类型;
删除字段ALTER TABLE 表名 DROP 字段;
删除表DROP TABLE IF EXISTS 表名;
查看连接SHOW PROCESSLIST;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行