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 从入门到精通完全教程

目录 1. 前言 2. MySQL 基础认知 3. MySQL 安装与配置 4. MySQL 核心语法 5. 高级查询技巧 6. MySQL 函数 7. 数据约束 8. 事务管理 9. 索引优化 10. 存储过程与函数 11. 用户与权限管理 12. 性能优化实战 13. 常见问题与解决方案 1. 前言 1.1 什么是MySQL? MySQL 是一款开源的关系型数据库管理系统(RDBMS),基于SQL(结构化查询语言)实现数据管理,广泛应用于Web开发(如PHP+MySQL、Python+MySQL),特点是轻量、高效、跨平台、

By Ne0inhk
SpringBoot 整合 Langchain4j 实现会话记忆存储深度解析

SpringBoot 整合 Langchain4j 实现会话记忆存储深度解析

目录 一、前言 二、AI大模型会话记忆介绍 2.1 AI 大模型的会话记忆是什么 2.2 AI 大模型为什么需要会话记忆 2.3 AI 大模型会话记忆常用实现方案 2.4 LangChain4j 会话记忆介绍 2.4.1 LangChain4j 会话记忆介绍 2.4.2 LangChain4j 会话记忆类型 三、Langchain4j 会话记忆操作案例使用 3.1 前置准备 3.1.1 导入依赖文件 3.1.2 添加配置文件 3.1.3 前置案例 3.

By Ne0inhk
Spring Boot 数据访问与数据库集成

Spring Boot 数据访问与数据库集成

Spring Boot 数据访问与数据库集成 18.1 学习目标与重点提示 学习目标:掌握Spring Boot数据访问与数据库集成的核心概念与使用方法,包括Spring Boot数据访问的基本方法、Spring Boot与MySQL的集成、Spring Boot与H2的集成、Spring Boot与MyBatis的集成、Spring Boot与JPA的集成、Spring Boot的事务管理、Spring Boot的实际应用场景,学会在实际开发中处理数据库访问问题。 重点:Spring Boot数据访问的基本方法、Spring Boot与MySQL的集成、Spring Boot与H2的集成、Spring Boot与MyBatis的集成、Spring Boot与JPA的集成、Spring Boot的事务管理、Spring Boot的实际应用场景。 18.2 Spring Boot数据访问概述 Spring Boot数据访问是指使用Spring Boot进行数据库操作的方法。 18.2.1 数据访问的定义

By Ne0inhk