MySQL 进阶:库与表的DDL核心操作全指南(含实战案例)

MySQL 进阶:库与表的DDL核心操作全指南(含实战案例)
在这里插入图片描述

🔥草莓熊Lotso:个人主页
❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》
✨生活是默默的坚持,毅力是永久的享受!


🎬 博主简介:

在这里插入图片描述

文章目录


前言:

在上一篇 MySQL 基础入门中,我们了解了数据库的基本概念和简单操作。而在实际开发中,数据库和表的创建、修改、备份、删除等操作是日常高频需求,掌握这些精准操作能避免数据丢失、提升开发效率。本文将基于 MySQL 实战场景,详细拆解库与表的完整操作流程,包括字符集选择、表结构设计、备份恢复等核心知识点,带你从 “会用” 进阶到 “活用” MySQL。

一. 数据库(库)的核心操作

数据库是表的容器,合理的库操作是数据管理的基础。下面涵盖库的创建、查询、修改、删除、备份恢复等关键操作,同时详解字符集和校验规则的影响。

1.1 创建数据库:指定字符集与校验规则

创建数据库时,不仅要定义库名,还需根据业务场景指定字符集(如支持中文的utf8)和校验规则(如是否区分大小写),避免后续出现乱码或查询异常。

1.1.1 语法格式

CREATEDATABASE[IFNOTEXISTS] db_name [DEFAULT]CHARACTERSET charset_name [DEFAULT]COLLATE collation_name;
  • IF NOT EXISTS:避免重复创建数据库报错(可以不加但是这里推荐加);
  • CHARACTER SET:指定数据库字符集(默认utf8);
  • COLLATE:指定字符集的校验规则(默认utf8_general_ci)。

1.1.2 实战案例

-- 1. 创建默认字符集的数据库db1CREATEDATABASEIFNOTEXISTS db1;-- 2. 创建指定utf8字符集的数据库db2CREATEDATABASEIFNOTEXISTS db2 CHARACTERSET utf8;-- 3. 创建指定字符集和校验规则的数据库db3CREATEDATABASEIFNOTEXISTS db3 CHARACTERSET utf8 COLLATE utf8_general_ci;

1.2 字符集与校验规则:影响查询和排序

字符集决定了数据的存储编码(如是否支持中文),校验规则则影响字符串的比较和排序(如是否区分大小写),这是容易被忽略但关键的细节。

1.2.1 查看系统默认配置

-- 查看默认字符集show variables like'character_set_database';-- 查看默认校验规则show variables like'collation_database';
在这里插入图片描述

1.2.2 查看支持的字符集和校验规则

-- 查看所有支持的字符集showcharset;-- 查看所有支持的校验规则show collation;

1.2.3 校验规则的实际影响

以 “是否区分大小写” 为例,对比两种常用校验规则:

  • utf8_general_ci:不区分大小写(ci=case insensitive);
  • utf8_bin:区分大小写(bin=binary,按二进制比较)。

案例演示

-- 1. 创建不区分大小写的数据库test1CREATEDATABASE test1 COLLATE utf8_general_ci;USE test1;CREATETABLE person(name varchar(20));INSERTINTO person VALUES('a'),('A'),('b'),('B');-- 查询name='a':返回'a'和'A'(不区分大小写)SELECT*FROM person WHERE name='a';-- 排序:按字母顺序排序(不区分大小写)SELECT*FROM person ORDERBY name;
在这里插入图片描述
-- 2. 创建区分大小写的数据库test2CREATEDATABASE test2 COLLATE utf8_bin;USE test2;CREATETABLE person(name varchar(20));INSERTINTO person VALUES('a'),('A'),('b'),('B');-- 查询name='a':仅返回'a'(区分大小写)SELECT*FROM person WHERE name='a';-- 排序:按二进制ASCII码排序(大写在前,小写在后)SELECT*FROM person ORDERBY name;
在这里插入图片描述

1.3 操纵数据库:查询、修改、删除

1.3.1 查看所有数据库

showdatabases;

1.3.2 查看数据库创建语句

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

showcreatedatabase db3;

输出样例

+----------+----------------------------------------------------------------+ | Database | Create Database | +----------+----------------------------------------------------------------+ | db3 | CREATE DATABASE `db3` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci */ | +----------+----------------------------------------------------------------+ 
  • 反引号 `:防止库名与关键字冲突;

/*!40100 ... */:条件执行,MySQL 版本≥4.0.10 时生效。

在这里插入图片描述

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

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

-- 将db3的字符集改为gbkALTERDATABASE db3 CHARACTERSET gbk;

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

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

DROPDATABASEIFEXISTS db3;

1.4 数据库备份与恢复:避免数据丢失

备份恢复是数据库运维的核心技能,支持全库备份、单表备份、多库备份。

1.4.1 备份(退出 MySQL 客户端执行)

  • 语法
mysqldump -P端口 -u用户名 -p密码 -B 数据库名 > 备份文件路径 
  • 补充说明
    • 备份单表:mysqldump -uroot -p 数据库名 表名1 表名2 > 备份文件路径
    • 备份多库:mysqldump -uroot -p -B 数据库名1 数据库名2 ... > 备份文件路径

1.4.2 恢复(在 MySQL 客户端执行)

-- 恢复整个数据库 source 备份文件路径;

注意:若备份时未加-B参数,恢复前需先创建空数据库并切换:

CREATEDATABASEIFNOTEXISTS mytest;USE mytest; 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 | +----+------+-----------+------+---------+------+-------+------------------+ 
  • Command:连接状态(Sleep为空闲,Query为执行中);
  • Time:连接持续时间(秒);
  • Info:执行的 SQL 语句。
在这里插入图片描述

二. 数据表(表)的核心操作

表是存储数据的核心载体,表结构的设计和修改直接影响业务开发,下面涵盖表的创建、查看、修改、删除全流程。

2.1 创建表:指定字段、类型、存储引擎

创建表时需明确字段名、数据类型、字符集、存储引擎等,同时可通过comment添加字段说明。

2.1.1 语法格式

CREATETABLE table_name ( field1 datatype [comment'字段说明'], field2 datatype [comment'字段说明'],...)CHARACTERSET 字符集 COLLATE 校验规则 ENGINE 存储引擎;

2.1.2 实战案例

USE mytest;CREATETABLE users ( id intcomment'用户ID', name varchar(20)comment'用户名', password char(32)comment'密码是32位的MD5加密值', birthday datecomment'生日')CHARACTERSET utf8 ENGINE MyISAM;
在这里插入图片描述

2.1.3 不同存储引擎的文件差异

MySQL 支持插件式存储引擎,不同引擎的表文件存储格式不同:

  • MyISAM(示例中使用):
    • users.frm:表结构文件;
    • users.MYD:表数据文件;
    • users.MYI:表索引文件;
  • InnoDB(默认引擎):
    • users.frm:表结构文件;
    • users.ibd:表数据 + 索引文件(聚簇索引结构)。

2.2 查看表结构:验证表设计

-- 简洁查看表结构desc users;-- 详细查看表结构(含注释)showcreatetable users;
在这里插入图片描述


在这里插入图片描述

2.3 修改表:适配业务需求变更

项目开发中,表结构需频繁适配业务变更(如添加字段、修改字段类型等),ALTER TABLE是核心指令。

2.3.1 常用修改操作语法

操作类型语法示例
添加字段ALTER TABLE表名ADD字段名类型 [comment ‘说明’] [AFTER已有字段名]
修改字段类型ALTER TABLE表名MODIFY字段名新类型
修改字段名 + 类型ALTER TABLE表名CHANGE旧字段名新字段名新类型
删除字段ALTER TABLE表名DROP字段名
修改表名ALTER TABLE旧表名RENAME TO新表名(TO可省略)

2.3.2 实战案例

USE mytest;-- 1. 给users表添加字段assets(图片路径),放在birthday之后ALTERTABLE users ADD assets varchar(100)comment'图片路径'AFTER birthday;-- 2. 修改name字段长度为60(适配更长的用户名)ALTERTABLE users MODIFY name varchar(60);-- 3. 删除password字段(假设密码存储方式变更)ALTERTABLE users DROP password;-- 4. 修改表名为employeeALTERTABLE users RENAME employee;-- 5. 将name字段改为xingming(适配中文命名习惯)ALTERTABLE employee CHANGE name xingming varchar(60);

2.3.3 注意事项

  • 添加字段:新字段默认允许为NULL,不会影响原有数据;
  • 修改字段类型:若字段已有数据,需确保新类型兼容旧数据(如varcharint可能失败);
  • 删除字段:字段及对应数据会永久删除,需提前备份。

2.4 删除表(谨慎操作!)

删除表会删除表结构和所有数据,无法恢复:

DROPTABLEIFEXISTS employee;

TEMPORARY:仅删除临时表(CREATE TEMPORARY TABLE创建的表):

DROPTEMPORARYTABLEIFEXISTS temp_table;

三. 总结与避坑指南

本文覆盖了 MySQL 库与表的全流程操作,核心要点总结如下:

  • 创建数据库时,建议明确指定CHARACTER SET utf8和校验规则,避免乱码(也可以提前去自己配置好);
  • 校验规则决定字符串比较逻辑,需根据业务场景选择(如用户名是否区分大小写);
  • 备份恢复是数据安全的保障,重要数据库需定期备份,备份时建议添加-B参数;
  • 修改表结构时,删除字段和修改字段类型需格外谨慎,避免数据丢失;
  • 存储引擎选择:InnoDB 支持事务和行级锁(默认推荐),MyISAM 查询速度快(适合只读场景)。

常见避坑点

  • 库名、表名、字段名避免使用 MySQL 关键字(如orderuser),若必须使用需加反引号 `;
  • 备份时未加-B参数,恢复前需手动创建数据库并切换;
  • 数据库不支持直接修改库名,需通过 “备份→删除旧库→恢复为新库名” 实现;
  • 字段类型选择需合理(如密码用char(32)存储 MD5 值,生日用date类型),避免浪费空间或存储异常,关于类型问题我们后面还会进行更加详细的学习。

结尾:

🍓 我是草莓熊 Lotso!若这篇技术干货帮你打通了学习中的卡点: 👀 【关注】跟我一起深耕技术领域,从基础到进阶,见证每一次成长 ❤️ 【点赞】让优质内容被更多人看见,让知识传递更有力量 ⭐ 【收藏】把核心知识点、实战技巧存好,需要时直接查、随时用 💬 【评论】分享你的经验或疑问(比如曾踩过的技术坑?),一起交流避坑 🗳️ 【投票】用你的选择助力社区内容方向,告诉大家哪个技术点最该重点拆解 技术之路难免有困惑,但同行的人会让前进更有方向~愿我们都能在自己专注的领域里,一步步靠近心中的技术目标! 

结语:掌握库与表的操作是 MySQL 开发的基础,下一篇将深入讲解 MySQL 数据类型、约束(主键、外键、唯一索引)等进阶知识点。创作不易,觉得有帮助的话,欢迎点赞、收藏、关注三连~ 若有操作疑问或场景需求,欢迎在评论区留言交流!

✨把这些内容吃透超牛的!放松下吧✨ʕ˘ᴥ˘ʔづきらど

Read more

告别小白!吃透 MySQL 基本查询,看这一篇就够了

告别小白!吃透 MySQL 基本查询,看这一篇就够了

🔥海棠蚀omo:个人主页                 ❄️个人专栏:《初识数据结构》,《C++:从入门到实践》,《Linux:从零基础到实践》,《Linux网络:从不懂到不会》,《MySQL:新手入门指南》                 ✨追光的人,终会光芒万丈 博主简介: 目录 一.Create 1.1替换 二.Retrieve 2.1SELECT列 2.1.1全列查询 2.1.2指定列查询 2.1.3查询字段为表达式 2.1.4为查询结果指定别名 2.1.5结果去重 2.2WHERE条件 2.2.1英语不及格的同学及英语成绩 2.2.2语文成绩在[80,90]分的同学及语文成绩

By Ne0inhk
Flutter 组件 okay 的适配 鸿蒙Harmony 深度进阶 - 驾驭异步结果链式融合、实现鸿蒙端分布式业务逻辑解耦与精密审计方案

Flutter 组件 okay 的适配 鸿蒙Harmony 深度进阶 - 驾驭异步结果链式融合、实现鸿蒙端分布式业务逻辑解耦与精密审计方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 okay 的适配 鸿蒙Harmony 深度进阶 - 驾驭异步结果链式融合、实现鸿蒙端分布式业务逻辑解耦与精密审计方案 前言 在前文中,我们探讨了 okay 在鸿蒙(OpenHarmony)端实现基础 Result 模式包装的实战。但在真正的“分布式微服务聚合”、“高并发资产对账”以及“具备自愈能力的 IoT 指令链”场景中。简单的 ok() 与 err() 判定往往不足以支撑起复杂的业务全景。面对需要同时并行发起 3 个 API 请求,并要求在“所有请求均成功时执行合并、任一请求失败时执行局部逻辑路由”的高阶需求。如果缺乏一套完善的异步结果映射与多级逻辑聚合机制。不仅会导致异步回调地狱(Callback Hell)在

By Ne0inhk
MySQL 大数据处理优化与分布式架构探索

MySQL 大数据处理优化与分布式架构探索

MySQL 大数据处理优化与分布式架构探索 在数据爆炸式增长的时代,MySQL 作为一款流行的开源关系型数据库管理系统,如何在大数据处理场景下保持高效与稳定,成为了众多开发者和数据库管理员关注的焦点。本文将深入探讨 MySQL 大数据处理优化与分布式架构的实现与应用,帮助读者更好地应对高并发和大数据量的挑战。 一、MySQL 大数据处理面临的挑战 随着业务的发展和用户数量的增长,MySQL 数据库面临的数据量急剧增加,这对数据库的性能和扩展性提出了更高要求。传统的单机 MySQL 数据库在处理大规模数据时,往往会遇到性能瓶颈,如查询速度慢、写入压力大、存储能力不足等问题。因此,如何优化 MySQL 大数据处理,成为了一个亟待解决的问题。 二、MySQL 大数据处理优化策略 1. 索引优化 索引是 MySQL 查询优化的关键。合理的索引设计可以显著提高查询速度。在大数据量场景下,应重点关注以下几点: * 选择合适的索引类型:根据查询需求选择合适的索引类型,如主键索引、唯一索引、普通索引、复合索引等。[9] * 避免索引失效:注意查询条件中的数据类型匹配、

By Ne0inhk
分布式文件存储服务设计与实现优化

分布式文件存储服务设计与实现优化

分布式文件存储服务设计与实现:基于 brpc+MinIO+Redis+etcd 的全栈方案 在分布式系统中,文件存储服务需要解决高可用、高性能、可扩展三大核心问题。本文将详细解析一套基于 brpc(RPC 框架)、MinIO(对象存储)、Redis(缓存 / 元数据存储)、etcd(服务注册发现)的分布式文件存储服务实现,包含服务端核心逻辑、依赖封装、RPC 接口设计及客户端测试全流程,助力开发者快速搭建企业级文件存储解决方案。 一、系统架构总览 本文件存储服务采用分层设计,整体架构如下: ┌─────────────────┐ ┌─────────────────────────────────────┐ │ 客户端层 │ │ 服务端层 │ │ (测试/业务客户端)│◄────►│ ┌─────────┐ ┌─────────────────┐ │ └─────────────────┘ │ │ RPC服务 │ │ 核心依赖层 │ │ │ │(brpc) │◄─►│ MinIO+Redis+LRU │ │ ┌─────────────────┐ │ └─────────┘

By Ne0inhk