MySQL库与表的DDL核心操作实战案例

 更新时间:2026年03月13日 09:35:28   作者:草莓熊Lotso  
本文详细介绍了MySQL数据库和表的创建、修改、备份、删除等操作,涵盖了字符集选择、表结构设计、备份恢复等核心知识点,通过实际案例,读者可以掌握精准操作,避免数据丢失,提升开发效率,感兴趣的朋友跟随小编一起看看吧

前言:

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

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

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

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

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

1.1.1 语法格式

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

1.1.2 实战案例

-- 1. 创建默认字符集的数据库db1
CREATE DATABASE IF NOT EXISTS db1;
-- 2. 创建指定utf8字符集的数据库db2
CREATE DATABASE IF NOT EXISTS db2 CHARACTER SET utf8;
-- 3. 创建指定字符集和校验规则的数据库db3
CREATE DATABASE IF NOT EXISTS db3 
CHARACTER SET utf8 
COLLATE utf8_general_ci;

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

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

1.2.1 查看系统默认配置

-- 查看默认字符集
show variables like 'character_set_database';
-- 查看默认校验规则
show variables like 'collation_database';

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

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

1.2.3 校验规则的实际影响

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

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

案例演示

-- 1. 创建不区分大小写的数据库test1
CREATE DATABASE test1 COLLATE utf8_general_ci;
USE test1;
CREATE TABLE person(name varchar(20));
INSERT INTO person VALUES('a'),('A'),('b'),('B');
-- 查询name='a':返回'a'和'A'(不区分大小写)
SELECT * FROM person WHERE name='a';
-- 排序:按字母顺序排序(不区分大小写)
SELECT * FROM person ORDER BY name;

-- 2. 创建区分大小写的数据库test2
CREATE DATABASE test2 COLLATE utf8_bin;
USE test2;
CREATE TABLE person(name varchar(20));
INSERT INTO person VALUES('a'),('A'),('b'),('B');
-- 查询name='a':仅返回'a'(区分大小写)
SELECT * FROM person WHERE name='a';
-- 排序:按二进制ASCII码排序(大写在前,小写在后)
SELECT * FROM person ORDER BY name;

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

1.3.1 查看所有数据库

show databases;

1.3.2 查看数据库创建语句

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

show create database 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的字符集改为gbk
ALTER DATABASE db3 CHARACTER SET gbk;

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

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

DROP DATABASE IF EXISTS 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参数,恢复前需先创建空数据库并切换:

CREATE DATABASE IF NOT EXISTS 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 语法格式

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

2.1.2 实战案例

USE mytest;
CREATE TABLE users (
  id int comment '用户ID',
  name varchar(20) comment '用户名',
  password char(32) comment '密码是32位的MD5加密值',
  birthday date comment '生日'
) 
CHARACTER SET utf8 
ENGINE MyISAM;

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

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

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

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

-- 简洁查看表结构
desc users;
-- 详细查看表结构(含注释)
show create table 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之后
ALTER TABLE users ADD assets varchar(100) comment '图片路径' AFTER birthday;
-- 2. 修改name字段长度为60(适配更长的用户名)
ALTER TABLE users MODIFY name varchar(60);
-- 3. 删除password字段(假设密码存储方式变更)
ALTER TABLE users DROP password;
-- 4. 修改表名为employee
ALTER TABLE users RENAME employee;
-- 5. 将name字段改为xingming(适配中文命名习惯)
ALTER TABLE employee CHANGE name xingming varchar(60);

2.3.3 注意事项

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

2.4 删除表(谨慎操作!)

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

DROP TABLE IF EXISTS employee;

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

DROP TEMPORARY TABLE IF EXISTS temp_table;

三. 总结与避坑指南

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

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

常见避坑点

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

到此这篇关于MySQL库与表的DDL核心操作实战案例的文章就介绍到这了,更多相关mysql库与表ddl操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL最左匹配原则详细分析

    MySQL最左匹配原则详细分析

    首先回顾一下什么是最左匹配(也有称之为最左前缀)?顾名思义:最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like)就会停止匹配
    2022-12-12
  • MySQL之浅谈DDL和DML

    MySQL之浅谈DDL和DML

    大家好,本篇文章主要讲的是MySQL之浅谈DDL和DML,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 详解如何修改MySQL最大连接数

    详解如何修改MySQL最大连接数

    本文主要介绍了详解如何修改MySQL最大连接数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • MySQL单表百万数据记录分页性能优化技巧

    MySQL单表百万数据记录分页性能优化技巧

    自己的一个网站,由于单表的数据记录高达了一百万条,造成数据访问很慢,Google分析的后台经常报告超时,尤其是页码大的页面更是慢的不行
    2016-08-08
  • Oracle开启和关闭的四种模式

    Oracle开启和关闭的四种模式

    这篇文章主要介绍了Oracle开启和关闭的四种模式 ,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • MySQL 视图 第1349号错误解决方法

    MySQL 视图 第1349号错误解决方法

    把下面SQL里的SELECT单独执行,没有问题,但是用来CREATE VIEW 就报错了.
    2008-03-03
  • MySQL8.0修改密码的正确姿势分享

    MySQL8.0修改密码的正确姿势分享

    如果当初设置了一个很复杂的数据库密码,是很可能忘记的,下面这篇文章主要给大家介绍了关于MySQL8.0修改密码的正确姿势,需要的朋友可以参考下
    2022-03-03
  • mysql 5.7.17 安装教程 附MySQL服务无法启动的解决方法

    mysql 5.7.17 安装教程 附MySQL服务无法启动的解决方法

    这篇文章主要为大家详细介绍了mysql 5.7.17安装教程,并且为大家分享了MySQL服务无法启动的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • 使用MySQL设置远程数据库以优化网站性能的操作步骤

    使用MySQL设置远程数据库以优化网站性能的操作步骤

    随着您的应用程序或网站的增长,您可能会发现已经超出了当前的设置,如果您目前将 Web 服务器和数据库后端托管在同一台 VPS 上,一个好主意是将这两个功能分开,以便每个功能可以在自己的机器上运行和增长,在本指南中,我们将讨论如何配置一个远程数据库服务器
    2024-11-11
  • mysql视图原理与用法实例详解

    mysql视图原理与用法实例详解

    这篇文章主要介绍了mysql视图原理与用法,结合实例形式详细分析了mysql视图的概念、原理、使用方法及操作注意事项,需要的朋友可以参考下
    2020-04-04

最新评论