news 2026/6/18 23:30:41

【MySQL基础】库与表的全面操纵指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【MySQL基础】库与表的全面操纵指南

🔥个人主页:Cx330🌸

❄️个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》《C++知识分享》

《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔

《Git深度解析》:版本管理实战全解 《Qt 极境架构》

🌟心向往之行必能


🎥Cx330🌸的简介:


目录

前言:

一、 数据库(Database)操作深度解析

1.1 创建数据库

💡 实战案例

1.2 校验规则的“深水区”:区分大小写的影响

实验对比:

1.3 数据库日常维护指令

1.3.1 查看所有数据库

1.3.2 查看数据库创建语句

1.3.3 修改数据库(仅字符集和校验规则)

1.3.4 删除数据库(谨慎操作!)

1.4 数据库备份与还原(核心运维技能)

1.4.1 备份整个数据库

1.4.2 还原数据库

1.4.3 进阶备份场景

1.5 数据库监控:查看连接情况

二、 数据表(Table)操作全攻关

2.1 创建数据表

🛠️ 实战演练:

🔍 底层探秘:不同的存储引擎,物理文件大不相同!

2.2 查看表结构

2.3 动态修改表结构(DDL 操作)

1. 添加新字段(ADD)

2. 修改字段属性(MODIFY)

3. 删除字段(DROP)

4. 修改表名(RENAME)

5. 修改字段名与定义(CHANGE)

2.4 删除数据表

💡 结语


前言:

作为 C++ 开发者,我们在编写高性能后端服务时,不可避免地要与底层存储打交道。MySQL 作为主流的关系型数据库,其基础的“库操作”与“表操作”是每一位程序员的看家本领。今天博主将结合底层原理,带大家一次性吃透 MySQL 库与表的核心操纵技巧。


一、 数据库(Database)操作深度解析

数据库是表的载体。理解数据库的字符集与校验规则,是避免中文乱码和检索异常的关键。

1.1 创建数据库

创建数据库的标准语法如下:

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification]...];

其中,create_specification可以指定字符集(CHARACTER SET)校验规则(COLLATE)

💡 实战案例
  • 默认创建(系统默认采用utf8字符集,校验规则为utf8_general_ci):

    CREATE DATABASE db1;
  • 指定utf8字符集

    CREATE DATABASE db2 CHARSET=utf8;
  • 同时指定字符集与校验规则

    CREATE DATABASE db3 CHARSET=utf8 COLLATE utf8_general_ci;

1.2 校验规则的“深水区”:区分大小写的影响

字符集决定了存储哪些语言,而校验规则(Collation)决定了如何对字符进行比较和排序。

MySQL 中常见的两种utf8校验规则:

  1. utf8_general_ci不区分大小写(Case-Insensitive)。

  2. utf8_bin区分大小写(Binary,按二进制比对)。

实验对比:

数据库

校验规则

插入数据

查询where name='a'的结果

order by name排序结果

test1

utf8_general_ci

a,A,b,B

返回aA(共2行)

a -> A -> b -> B

test2

utf8_bin

a,A,b,B

仅返回a(共1行)

A -> B -> a -> b(大写在前)

博主敲黑板:在设计用户登录、唯一标识等字段时,一定要根据业务逻辑选对校验规则。如果需要密码或账号严格区分大小写,请务必使用_bin结尾的二进制校验规则!

1.3 数据库日常维护指令

  • 查看系统默认字符集与校验规则

    SHOW VARIABLES LIKE 'character_set_database'; SHOW VARIABLES LIKE 'collation_database';
  • 查看系统支持的所有字符集及校验规则

    SHOW CHARSET; SHOW COLLATION;
1.3.1 查看所有数据库
SHOW DATABASES;
1.3.2 查看数据库创建语句

验证数据库的字符集、校验规则等配置:

SHOW CREATE DATABASE mytest;

注:返回的语句中,数据库名会被加上反引号 ` ,这是为了防止数据库名与系统保留关键字冲突;同时形如/*!40100 DEFAULT ... */的代码并不是普通的注释,而是条件注释,表示当 MySQL 版本大于 4.01 时将执行该语句。

1.3.3 修改数据库(仅字符集和校验规则)

数据库创建后,仅支持修改字符集和校验规则,不支持修改库名(需通过备份恢复间接修改):

ALTER DATABASE mytest CHARSET=gbk;
1.3.4 删除数据库(谨慎操作!)

删除数据库会级联删除所有表和数据,且无法恢复:

DROP DATABASE [IF EXISTS] db_name;

⚠️极其重要提示:数据库删除是级联删除,里面的所有数据表和数据都会被一并抹除。千万不要在生产环境下轻易尝试!

1.4 数据库备份与还原(核心运维技能)

在退出 MySQL 连接的终端下,我们可以使用mysqldump进行备份。

1.4.1 备份整个数据库
# 注意 -B 参数会带上创建数据库的语句 mysqldump -P3306 -u root -p密码 -B 数据库名 > 备份存储的路径.sql # 示例: mysqldump -P3306 -u root -p123456 -B mytest > D:/mytest.sql
1.4.2 还原数据库

进入 MySQL 客户端后,执行source指令:

mysql> SOURCE D:/mytest.sql;
1.4.3 进阶备份场景
  • 仅备份数据库中的特定表

    mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql
  • 同时备份多个数据库

    mysqldump -u root -p -B 数据库名1 数据库名2... > D:/multi_db.sql
  • 避坑指南:如果备份时没有-B参数,那么在还原时,必须先在目标 MySQL 中手动CREATE DATABASE创建空库,然后使用USE 数据库名切换进去,最后才能执行SOURCE还原!

1.5 数据库监控:查看连接情况

当你发现数据库响应变慢,或者怀疑遭遇外部恶意连接时,可以使用以下命令:

SHOW PROCESSLIST;

输出样例

+----+------+-----------+------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------+------+---------+------+-------+------------------+ | 2 | root | localhost | test1| Sleep | 120 | | NULL | | 3 | root | localhost | NULL | Query | 0 | NULL | show processlist | +----+------+-----------+------+---------+------+-------+------------------+

该命令可以实时显示当前有哪些用户连接到了 MySQL,以及他们正在执行的命令、所处的状态和消耗的时间。


二、 数据表(Table)操作全攻关

学完了库,我们来啃最硬的骨头——表结构的操作。

2.1 创建数据表

标准语法:

CREATE TABLE table_name ( field1 datatype, field2 datatype, ... ) CHARACTER SET 字符集 COLLATE 校验规则 ENGINE 存储引擎;
🛠️ 实战演练:
CREATE TABLE users ( id INT, name VARCHAR(20) COMMENT '用户名', password CHAR(32) COMMENT '密码是32位的md5值', birthday DATE COMMENT '生日' ) CHARACTER SET utf8 ENGINE MyISAM;

🔍 底层探秘:不同的存储引擎,物理文件大不相同!

当我们创建了上面的user1表(引擎为MyISAM)以及一个InnoDB引擎的表时,切换到 MySQL 的数据目录下,你会发现:

  • MyISAM 引擎的表会生成三个文件:

    1. user1.frm:表结构定义

    2. user1.MYD:表数据(Data)

    3. user1.MYI:表索引(Index)

  • InnoDB 引擎的表会生成两个文件:

    1. user2.frm:表结构定义

    2. user2.ibd:表数据与索引合并存储的文件

2.2 查看表结构

使用desc或者是describe命令可以快速查看表的字段属性:

DESC users;

输出字段包括:Field(字段名)、Type(类型)、Null(是否允许为空)、Key(索引类型)、Default(默认值)、Extra(扩充属性)。

2.3 动态修改表结构(DDL 操作)

在实际项目迭代中,需求的变更往往伴随着表结构的调整。以下是高频使用的ALTER TABLE命令:

1. 添加新字段(ADD)

birthday字段后面添加一个名为image_path的图片路径字段:

ALTER TABLE users ADD image_path VARCHAR(100) COMMENT '图片路径' AFTER birthday;

注意:插入新字段后,原来表中已有的历史数据的该字段值会自动填充为NULL

2. 修改字段属性(MODIFY)

name字段的长度从 20 扩展到 60:

ALTER TABLE users MODIFY name VARCHAR(60);

3. 删除字段(DROP)

⚠️注意:删除字段会同时将该列对应的所有历史数据删除,请谨慎操作!

ALTER TABLE users DROP password;

4. 修改表名(RENAME)

users表改名为xingmingTO关键字可以省略):

ALTER TABLE users RENAME TO employee;
5. 修改字段名与定义(CHANGE)

如果要将name列的名字修改为xingming,需要写出完整的字段新定义:

ALTER TABLE employee CHANGE name xingming VARCHAR(60);

2.4 删除数据表

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name;

示例:

DROP TABLE IF EXISTS t1;


💡 结语

掌握了 MySQL 库与表的基本功,我们就拿到了通往高并发、分布式后端开发的第一张入场券。规范的 SQL 编写习惯与合理的引擎、字符集选择,能够帮助我们在项目初期避开 90% 的底层性能和乱码深坑。

如果你觉得这篇博文对你有帮助,别忘了三连(点赞+收藏+关注)支持一下博主!我们下期再见!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/18 23:25:39

ZXPInstaller:如何在3分钟内免费安装任何Adobe插件

ZXPInstaller:如何在3分钟内免费安装任何Adobe插件 【免费下载链接】ZXPInstaller Open Source ZXP Installer for Adobe Extensions 项目地址: https://gitcode.com/gh_mirrors/zx/ZXPInstaller 还在为Adobe插件安装的复杂流程而烦恼吗?ZXPInsta…

作者头像 李华
网站建设 2026/6/18 23:27:53

硬件实操分享:CK6869D-B开机机制、使用条件与软件定制方法

前言大家好,我是原厂硬件工程师,长期负责CK系列蓝牙SOC的方案调试、选型答疑和技术对接。很多研发朋友在区分CK6869D-A和CK6869D-B两个版本时,经常会遇到一个核心问题:CK6869D-B通电之后设备没有任何反应,是不是芯片损…

作者头像 李华
网站建设 2026/6/9 11:36:32

02-Hooks完全指南——01-useState 深入与最佳实践

useState 深入与最佳实践 一、useState 基础 1.1 基本语法 const [state, setState] useState(initialState);state:当前的状态值setState:更新状态的函数initialState:初始值(可以是任意类型) 1.2 基础示例 function…

作者头像 李华
网站建设 2026/6/9 11:36:30

5分钟彻底掌握Android虚拟定位:FakeLocation应用级位置模拟终极指南

5分钟彻底掌握Android虚拟定位:FakeLocation应用级位置模拟终极指南 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 你是否曾经因为位置限制而无法参与心仪的游戏活动…

作者头像 李华
网站建设 2026/6/9 11:36:22

83-Java 自动装箱和拆箱

Java 自动装箱和拆箱 在本教程中,我们将借助示例学习Java自动装箱和拆箱。 Java自动装箱-包装器对象的原始类型 在自动装箱中,Java编译器会自动将原始类型转换为其相应的包装器类对象。例如, int a 56; // 自动装箱 Integer aObj a;使用Jav…

作者头像 李华