作为一名后端开发者,DDL(数据定义语言) 是我们操作 MySQL 数据库的入门必修课。它负责定义数据库、表等对象的结构,是构建数据存储体系的基础。今天这篇文章,我会结合学习案例,把 DDL 的核心语法拆解得明明白白,新手也能轻松上手!(之前已经详细写过了MySQL的基础操作 现在时对MySQL体系的完善 想看详细操作的话请看之前写的MySQL的操作)
目录
[一、数据库级 DDL 操作:创建、查询、删除与切换](#一、数据库级 DDL 操作:创建、查询、删除与切换)
[1. 查询数据库:查看当前服务器的数据库列表](#1. 查询数据库:查看当前服务器的数据库列表)
[2. 创建数据库:避免重复,指定字符集](#2. 创建数据库:避免重复,指定字符集)
[3. 删除数据库:谨慎操作,防止误删](#3. 删除数据库:谨慎操作,防止误删)
[4. 切换数据库:操作表的前提](#4. 切换数据库:操作表的前提)
[二、表结构级 DDL 操作:查询、创建、修改与删除](#二、表结构级 DDL 操作:查询、创建、修改与删除)
[1. 查询表结构:三种方式,按需使用](#1. 查询表结构:三种方式,按需使用)
[2. 创建表结构:字段设计是核心](#2. 创建表结构:字段设计是核心)
[3. 修改表结构:增删改字段、重命名表](#3. 修改表结构:增删改字段、重命名表)
[4. 删除表:两种方式,区别要分清](#4. 删除表:两种方式,区别要分清)
[三、DDL 核心知识点总结](#三、DDL 核心知识点总结)
一、数据库级 DDL 操作:创建、查询、删除与切换
数据库是表的容器,一切表操作都要先从数据库操作开始。我们常用的数据库级 DDL 指令有 查询、创建、删除、切换 四种。
1. 查询数据库:查看当前服务器的数据库列表
想要知道 MySQL 里有哪些数据库,用这两条指令就够了:
-
查询所有数据库
sqlSHOW DATABASES;这条指令会列出当前 MySQL 服务器中所有的数据库,包括系统自带的库(如
mysql、information_schema)和用户自定义库。SQL 语句中的空格不影响执行,一个或多个都可以。 -
查询当前所处数据库
sqlSELECT DATABASE();注意!这里的
DATABASE()是函数,必须带括号 ,很多新手容易漏掉括号导致报错。如果还没切换到任何数据库,执行结果会是NULL。
2. 创建数据库:避免重复,指定字符集
创建数据库的基础语法很简单,但想要写得规范,有两个关键点要注意:避免重复创建 和 设置正确字符集。
-
基础语法
sqlCREATE DATABASE 数据库名;比如创建一个名为 sicheng 的数据库:
sqlCREATE DATABASE sicheng; -
进阶写法:添加存在性检查 + 指定字符集
sqlCREATE DATABASE IF NOT EXISTS sicheng DEFAULT CHARSET utf8mb4;IF NOT EXISTS:如果数据库不存在才创建,避免重复创建时抛出错误,这是生产环境的必备写法。DEFAULT CHARSET utf8mb4:指定数据库的默认字符集为utf8mb4。强烈推荐使用utf8mb4而非utf8,因为前者支持 4 字节字符(比如 emoji 表情、部分生僻汉字),后者仅支持 3 字节,容易出现乱码。
3. 删除数据库:谨慎操作,防止误删
删除数据库的操作不可逆,执行前一定要再三确认!
-
基础语法
sqlDROP DATABASE 数据库名; -
安全写法:添加存在性检查
sqlDROP DATABASE IF EXISTS sicheng;IF EXISTS的作用是:如果数据库不存在,不会报错,只会返回一个警告,避免程序因执行错误中断。执行成功后,MySQL 会返回Query OK提示,再次执行SHOW DATABASES就能确认数据库已被移除。
4. 切换数据库:操作表的前提
想要操作某个数据库里的表,必须先切换到该数据库:
sql
USE sicheng;
执行成功后会显示 Database changed。
小技巧 :在 MySQL 命令行中,用 上下方向键 可以快速调用之前执行过的 SQL 语句,不用重复输入。
二、表结构级 DDL 操作:查询、创建、修改与删除
数据库创建好后,就可以在里面创建表了。表是存储数据的核心对象,表结构的操作是 DDL 的重点内容。
1. 查询表结构:三种方式,按需使用
查询表结构的指令有三种,分别适用于不同的场景,前提是必须先用 USE 指令切换到目标数据库。
| 指令 | 语法 | 功能 | 适用场景 |
|---|---|---|---|
| 查看所有表 | SHOW TABLES; |
列出当前数据库中的所有表名 | 快速确认数据库中有哪些表 |
| 查看基础表结构 | DESC 表名;(或 DESCRIBE 表名;) |
显示字段名、类型、是否允许 NULL、键类型等基础信息 | 快速了解表的字段组成 |
| 查看完整建表语句 | SHOW CREATE TABLE 表名; |
显示创建该表的完整 SQL 语句,包含字段注释、表注释、存储引擎、字符集等 | 备份表结构、查看详细配置 |
案例演示 :刚创建的 sicheng 数据库是空的,执行 SHOW TABLES; 会返回 empty set;切换到系统数据库 mysql 后再执行,就能看到系统预设的表了。
2. 创建表结构:字段设计是核心
创建表的核心是字段设计,包括字段名、数据类型、注释等。先记住语法规则,再结合数据类型选择技巧,就能设计出合理的表结构。
-
基本语法
sqlCREATE TABLE 表名 ( 字段1 数据类型 [COMMENT 注释], 字段2 数据类型 [COMMENT 注释], ... 字段N 数据类型 [COMMENT 注释] # 注意:最后一个字段后不能加逗号 ) [COMMENT 表注释];语法要点 :字段之间用逗号分隔,最后一个字段后绝对不能加逗号,这是新手最容易犯的错误!
-
数据类型选择技巧:选对类型,节省空间 MySQL 的数据类型分为数值型、字符串型、日期时间型三大类,选对类型不仅能节省存储空间,还能提升查询效率。
1.数值类型:根据取值范围选最小类型
| 类型 | 字节数 | 适用场景 | 案例 |
|---|---|---|---|
| TINYINT | 1 | 存储年龄、性别编码等小范围整数 | 年龄用 TINYINT UNSIGNED(无符号,范围 0-255) |
| INT | 4 | 存储常规整数 | 用户 ID、商品编号 |
| DOUBLE(M,D) | 8 | 存储带小数的数值 | 学生分数用 DOUBLE(4,1)(总位数 4,小数位 1,如 98.5) |
| DECIMAL(M,D) | 可变 | 存储高精度小数 | 金额(避免浮点误差) |
2.字符串类型:定长用 CHAR,变长用 VARCHAR
CHAR(n):定长字符串,无论存储内容多长,都占用n个字符空间,存取速度快 ,适用于长度固定的场景。比如性别字段gender CHAR(1)(存储 "男"/"女")、身份证号idcard CHAR(18)(固定 18 位)。VARCHAR(n):变长字符串,仅占用实际内容所需空间,节省存储空间 ,适用于长度不固定的场景。比如用户名name VARCHAR(50)、工号workno VARCHAR(10)。
3.日期时间类型:按需选择,避免冗余
DATE:仅存储年月日(YYYY-MM-DD),适用于生日、入职时间等场景。DATETIME:存储年月日时分秒,适用于订单创建时间等场景。TIMESTAMP:时间戳,范围较小(1970-2038),会自动更新,适用于记录数据修改时间。
-
**实战案例:创建员工表
emp**需求:设计一个员工表,包含编号、工号、姓名、性别、年龄、身份证号、入职时间字段。建表语句:sql
sqlUSE sicheng; -- 先切换到目标数据库 CREATE TABLE emp ( id INT COMMENT '编号', workno VARCHAR(10) COMMENT '工号', name VARCHAR(10) COMMENT '姓名', gender CHAR(1) COMMENT '性别', age TINYINT UNSIGNED COMMENT '年龄', idcard CHAR(18) COMMENT '身份证号', entrydate DATE COMMENT '入职时间' ) COMMENT '员工表';执行后,用
DESC emp;查看表结构,用SHOW CREATE TABLE emp;查看完整建表语句,确认存储引擎(默认InnoDB)和字符集(默认utf8mb4)是否正确。
3. 修改表结构:增删改字段、重命名表
表创建后,如果需求发生变化,可以用 ALTER TABLE 指令修改表结构,常见操作有添加字段、修改字段、删除字段、重命名表。
| 操作 | 语法 | 案例(基于 emp 表) |
|---|---|---|
| 添加字段 | ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释]; |
添加昵称字段:ALTER TABLE emp ADD nickname VARCHAR(20) COMMENT '昵称'; |
| 修改字段类型 | ALTER TABLE 表名 MODIFY 字段名 新类型(长度); |
修改昵称字段长度:ALTER TABLE emp MODIFY nickname VARCHAR(30); |
| 修改字段名 + 类型 | ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新类型(长度) [COMMENT 注释]; |
把 nickname 改为 username:ALTER TABLE emp CHANGE nickname username VARCHAR(30) COMMENT '用户名'; |
| 删除字段 | ALTER TABLE 表名 DROP 字段名; |
删除 username 字段:ALTER TABLE emp DROP username; |
| 重命名表 | ALTER TABLE 旧表名 RENAME TO 新表名; |
把 emp 改为 employee:ALTER TABLE emp RENAME TO employee; |
注意事项:
- 添加字段后,原数据不受影响,新字段的值默认为
NULL。 - 删除字段的操作不可逆,会永久删除该字段及其所有数据,生产环境一定要谨慎!
4. 删除表:两种方式,区别要分清
删除表的操作有两种,DROP TABLE 和 TRUNCATE TABLE,核心区别在于是否保留表结构:
-
彻底删除表(结构 + 数据)
sqlDROP TABLE IF EXISTS emp;执行后,表结构和数据会被全部删除,且不可恢复。
-
清空表数据(保留表结构)
sqlTRUNCATE TABLE emp;执行后,表结构还在,但数据会被清空,同样不可逆。
三、DDL 核心知识点总结
为了方便大家复习,我把 DDL 的核心知识点整理成了表格,重点、易错点一目了然:
| 知识点 | 核心内容 | 考试 / 面试重点 | 难度系数 |
|---|---|---|---|
| DDL 概述 | 数据定义语言,用于操作数据库、表的结构 | 区分 DDL 与 DML(数据操作语言)、DQL(数据查询语言) | ⭐⭐ |
| 数据库操作 | SHOW DATABASES/SELECT DATABASE()/CREATE DATABASE/DROP DATABASE/USE |
IF NOT EXISTS/IF EXISTS 的作用;utf8mb4 字符集的优势 |
⭐⭐ |
| 表查询操作 | SHOW TABLES/DESC/SHOW CREATE TABLE |
执行 SHOW TABLES 前必须切换数据库 |
⭐ |
| 表创建操作 | 字段设计 + 数据类型选择;最后一个字段不加逗号 | CHAR 与 VARCHAR 的区别;数值类型的范围选择 | ⭐⭐⭐ |
| 表修改操作 | ALTER TABLE 的增删改字段、重命名表 |
MODIFY(改类型)与 CHANGE(改字段名 + 类型)的区别 |
⭐⭐⭐⭐ |
| 表删除操作 | DROP TABLE(删结构 + 数据)与 TRUNCATE TABLE(清数据)的区别 |
两种删除方式的适用场景 | ⭐⭐ |
四、新手避坑指南
- 忘记切换数据库 :执行表操作前,一定要用
USE指令切换到目标数据库,否则会提示 "表不存在"。 - 字段后加多余逗号:创建表时,最后一个字段后不能加逗号,这是最常见的语法错误。
- 混淆
utf8和utf8mb4:存储 emoji 或生僻字时,一定要用utf8mb4,否则会出现乱码。 - 随意删除表 / 字段:DDL 的删除操作不可逆,生产环境操作前一定要备份数据。
总结
DDL 是 MySQL 的入门基础,掌握好数据库和表的创建、查询、修改、删除操作,才能为后续的 DML(增删改数据)、DQL(查询数据)打下坚实的基础。下一篇文章,我会给大家分享 DML 的核心语法,感兴趣的小伙伴可以关注我哦!
希望这篇文章对你有帮助,如果你有任何问题或建议,欢迎在评论区留言。谢谢阅读(求攒攒 收藏 关注)!
