摘要:正在学习 MySQL 的同学看过来!DDL(数据定义语言)是学习数据库的第一道门槛,命令多且容易混淆。本文整理了详细的 DDL 学习笔记,涵盖数据库操作、表结构设计、字段修改及常用数据类型避坑指南,建议收藏备用!

前言

最近在系统学习 MySQL,发现 SQL 中的 DDL (Data Definition Language) 虽然逻辑不难,但细节语法(特别是 ALTER 修改表结构部分)非常容易记混。

为了巩固记忆,也为了方便日后查阅,我整理了这份详细的 DDL 笔记。如果你也是数据库初学者,希望这份笔记能帮你少走弯路!

一、 什么是 DDL?

DDL (Data Definition Language),即数据定义语言。 它主要用于定义数据库的结构,操作对象是:数据库 (Database)表 (Table)字段 (Field)

简单理解:DDL 就是用来“盖房子”和“装修”的(建库、建表),而 DML(增删改)才是真正往房子里“住人”的(处理数据)。

二、 数据库操作 (Database)

这是最基础的操作,一切从创建一个库开始。

1. 查询数据库

-- 查询所有数据库
SHOW DATABASES;

-- 查询当前正在使用的数据库
SELECT DATABASE();

2. 创建数据库 (推荐写法)

建议加上 IF NOT EXISTS 以免报错,且务必指定 utf8mb4 字符集(为了支持 Emoji 表情等特殊符号)。

CREATE DATABASE IF NOT EXISTS my_db 
DEFAULT CHARSET utf8mb4;

3. 使用与删除

-- 切换/使用数据库
USE my_db;

-- 删除数据库 (慎用!)
DROP DATABASE IF EXISTS my_db;

三、 表操作 - 创建 (Create)

1. 语法结构

CREATE TABLE 表名(
    字段1 字段1类型 [COMMENT '字段1注释'],
    字段2 字段2类型 [COMMENT '字段2注释'],
    ...
    字段n 字段n类型 [COMMENT '字段n注释']
) COMMENT '表注释';

2. 实战案例

创建一个员工表 emp

CREATE TABLE emp (
    id INT COMMENT '编号',
    work_no VARCHAR(10) COMMENT '工号',
    name VARCHAR(10) COMMENT '姓名',
    gender CHAR(1) COMMENT '性别',
    age TINYINT UNSIGNED COMMENT '年龄',
    id_card CHAR(18) COMMENT '身份证号',
    entry_date DATE COMMENT '入职时间'
) COMMENT '员工表';

3. 💡 重点:数据类型怎么选?

在 DDL 中,选择合适的数据类型非常关键,也是面试常考点:

  • 数值类型

    • TINYINT: 适合年龄、状态码(0/1)。

    • INT: 标准整数。

    • BIGINT: 适合极大数值(如 ID 主键)。

    • DECIMAL: 涉及金额必须用这个,因为 float/double 会有精度丢失。

  • 字符串类型 (高频考点)

    • CHAR: 定长。性能高,但浪费空间。适合:身份证号、手机号、性别。

    • VARCHAR: 变长。节省空间,但性能略低。适合:姓名、家庭住址。

  • 日期类型

    • DATE: 只有年月日。

    • DATETIME: 年月日 + 时分秒。


四、 表操作 - 修改 (Alter) 🔥

这一部分是 DDL 中最难记的,一定要区分清楚 MODIFYCHANGE

1. 添加字段 (ADD)

-- 语法:ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释];
-- 案例:给 emp 表增加一个昵称字段
ALTER TABLE emp ADD nickname VARCHAR(20) COMMENT '昵称';

2. 修改数据类型 (MODIFY)

只改类型,不改字段名。

-- 语法:ALTER TABLE 表名 MODIFY 字段名 新类型(长度);
ALTER TABLE emp MODIFY nickname TEXT;

3. 修改字段名和类型 (CHANGE)

既改名,也改类型。

-- 语法:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释];
-- 案例:把 nickname 改为 username,类型改为 varchar(30)
ALTER TABLE emp CHANGE nickname username VARCHAR(30) COMMENT '用户名';

4. 删除字段 (DROP)

ALTER TABLE emp DROP username;

5. 修改表名 (RENAME)

ALTER TABLE emp RENAME TO employee;

五、 表操作 - 删除 (Drop vs Truncate)

这里有一个经典面试题:Truncate 和 Drop 有什么区别?

1. 删除表 (DROP)

DROP TABLE IF EXISTS tb_user;
  • 后果:表结构和表里的数据全部消失。

2. 截断表 (TRUNCATE)

TRUNCATE TABLE tb_user;
  • 后果:只删除表中的所有数据,保留表结构。

  • 实质:它实际上是先 Drop 掉表,然后根据原结构 Create 一个新表。自增 ID 通常会重置。


📝 学习总结

  1. 建库:记得用 utf8mb4

  2. 建表VARCHAR 省空间但慢,CHAR 费空间但快;金额用 DECIMAL

  3. 修改MODIFY 改类型,CHANGE 改名+类型。

  4. 删除:想要留壳去肉用 TRUNCATE,想要连根拔起用 DROP

以上就是 MySQL DDL 的基础内容,希望能帮助到大家!接下来我会继续更新 DML(数据的增删改)部分,欢迎关注!

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐