DDL是数据定义语言,用于创建、修改、删除数据库结构,执行后自动提交且不可回滚;包含CREATE、ALTER、DROP、TRUNCATE、RENAME五类语句,操作对象为数据库骨架而非具体数据。

数据库中DDL是指Data Definition Language(数据定义语言),它负责定义和管理数据库的结构,比如创建一张新表、给表加字段、删掉整个库——这些操作一旦执行就立即生效,【无法用ROLLBACK回滚】,稍有不慎就会导致结构丢失或数据清空。
DDL的核心作用与本质特征
DDL不是用来查数、改数或删某几条记录的,它的任务是搭建和调整“容器”本身:数据库、表、索引、视图这些对象的骨架。它不碰具体数据内容,只管“怎么存”。MySQL里所有DDL语句执行时都会自动提交当前事务,哪怕你之前BEGIN过、还没COMMIT,DDL一敲,前面所有未提交的DML操作也会被强制提交——这点常被忽略,容易引发意外数据固化。
五类常见DDL语句及典型用法
方法一:CREATE —— 造东西
用于新建数据库对象。例如建库:CREATE DATABASE mydb CHARACTER SET utf8mb4;;建表:CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(32));。注意字符集声明建议显式指定,避免后续插入中文乱码。
方法二:ALTER —— 改结构
修改已有对象。最常用的是给表加列:ALTER TABLE users ADD COLUMN email VARCHAR(100) UNIQUE;;也可以改字段类型:ALTER TABLE users MODIFY COLUMN name VARCHAR(64);。但修改主键或删除被索引字段前,必须先DROP相关索引,否则报错。
方法三:DROP —— 彻底删除
【DROP TABLE users; 会同时删掉表结构和全部数据,且不可恢复】。删库更危险:DROP DATABASE mydb;。执行前务必确认连接的是测试环境,生产库严禁直接DROP。
方法四:TRUNCATE —— 清空不留痕
只删数据,不动结构:TRUNCATE TABLE logs;。比DELETE快得多,且重置自增ID计数器。但它也是DDL,不能回滚,且会隐式提交事务。
方法五:RENAME —— 换名字
改表名:RENAME TABLE old_name TO new_name;。单条语句可批量重命名:RENAME TABLE a TO b, c TO d;。注意不能跨库重命名,目标名不能已存在。
执行DDL前必须做的三件事
第一步:确认当前连接的MySQL实例是开发/测试库,不是生产库。
第二步:检查是否有未提交的事务——运行SELECT @@autocommit;,若为0,再查SELECT TRX_ID FROM INFORMATION_SCHEMA.INNODB_TRX;是否为空。
第三步:对关键表执行SHOW CREATE TABLE table_name\G,把建表语句备份到本地文本,防止误操作后无法重建结构。

















