【MySQL 零基础入门】DDL 核心语法全解析:数据库与表结构操作篇

作为一名后端开发者,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 里有哪些数据库,用这两条指令就够了:

  • 查询所有数据库

    sql 复制代码
    SHOW DATABASES;

    这条指令会列出当前 MySQL 服务器中所有的数据库,包括系统自带的库(如 mysqlinformation_schema)和用户自定义库。SQL 语句中的空格不影响执行,一个或多个都可以

  • 查询当前所处数据库

    sql 复制代码
    SELECT DATABASE();

    注意!这里的 DATABASE() 是函数,必须带括号 ,很多新手容易漏掉括号导致报错。如果还没切换到任何数据库,执行结果会是 NULL

2. 创建数据库:避免重复,指定字符集

创建数据库的基础语法很简单,但想要写得规范,有两个关键点要注意:避免重复创建设置正确字符集

  • 基础语法

    sql 复制代码
    CREATE DATABASE 数据库名;

    比如创建一个名为 sicheng 的数据库:

    sql 复制代码
    CREATE DATABASE sicheng;
  • 进阶写法:添加存在性检查 + 指定字符集

    sql 复制代码
    CREATE DATABASE IF NOT EXISTS sicheng
    DEFAULT CHARSET utf8mb4;
    • IF NOT EXISTS:如果数据库不存在才创建,避免重复创建时抛出错误,这是生产环境的必备写法。
    • DEFAULT CHARSET utf8mb4:指定数据库的默认字符集为 utf8mb4强烈推荐使用 utf8mb4 而非 utf8,因为前者支持 4 字节字符(比如 emoji 表情、部分生僻汉字),后者仅支持 3 字节,容易出现乱码。

3. 删除数据库:谨慎操作,防止误删

删除数据库的操作不可逆,执行前一定要再三确认!

  • 基础语法

    sql 复制代码
    DROP DATABASE 数据库名;
  • 安全写法:添加存在性检查

    sql 复制代码
    DROP 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. 创建表结构:字段设计是核心

创建表的核心是字段设计,包括字段名、数据类型、注释等。先记住语法规则,再结合数据类型选择技巧,就能设计出合理的表结构。

  • 基本语法

    sql 复制代码
    CREATE 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

    sql 复制代码
    USE 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 TABLETRUNCATE TABLE,核心区别在于是否保留表结构:

  • 彻底删除表(结构 + 数据)

    sql 复制代码
    DROP TABLE IF EXISTS emp;

    执行后,表结构和数据会被全部删除,且不可恢复。

  • 清空表数据(保留表结构)

    sql 复制代码
    TRUNCATE 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(清数据)的区别 两种删除方式的适用场景 ⭐⭐

四、新手避坑指南

  1. 忘记切换数据库 :执行表操作前,一定要用 USE 指令切换到目标数据库,否则会提示 "表不存在"。
  2. 字段后加多余逗号:创建表时,最后一个字段后不能加逗号,这是最常见的语法错误。
  3. 混淆 utf8utf8mb4 :存储 emoji 或生僻字时,一定要用 utf8mb4,否则会出现乱码。
  4. 随意删除表 / 字段:DDL 的删除操作不可逆,生产环境操作前一定要备份数据。

总结

DDL 是 MySQL 的入门基础,掌握好数据库和表的创建、查询、修改、删除操作,才能为后续的 DML(增删改数据)、DQL(查询数据)打下坚实的基础。下一篇文章,我会给大家分享 DML 的核心语法,感兴趣的小伙伴可以关注我哦!


希望这篇文章对你有帮助,如果你有任何问题或建议,欢迎在评论区留言。谢谢阅读(求攒攒 收藏 关注)!

相关推荐
学编程的闹钟2 小时前
86【CSS的模块化处理】
学习
lkbhua莱克瓦242 小时前
Java进阶——IO流
java·开发语言·笔记·学习方法·io流
韩立学长2 小时前
【开题答辩实录分享】以《自选便利店商品分类管理系统》为例进行选题答辩实录分享
java·mysql·web
aspirestro三水哥2 小时前
2.5构建Xenomai测试与演示镜像
数据库·rtos·xenomai
weixin_409383122 小时前
姜丹四方向a*寻路学习记录4 不用计算起点到目的地的f 从开始计算的是角色起点四周的格子到目的地的f
学习
浦东新村轱天乐2 小时前
2025.12.01-2025.12.07:休假回来,开始迭代vlm
笔记
随机昵称_1234562 小时前
postgresql连接报错Invalid SCRAM client initialization
数据库·postgresql
im_AMBER2 小时前
Leetcode 72 数组列表中的最大距离
c++·笔记·学习·算法·leetcode
FFF团团员9092 小时前
树莓派学习笔记7:局域网的建立和程序自启动
笔记·学习