SQL DDL 是什么? 五个指令一次学会:CREATE、ALTER、TRUNCATE、DROP、RENAME

SQL 有四大分类:

  • DDL(数据定义语言)负责处理表格的「结构」。
  • DML(数据操作语言)负责处理表格的「资料」。
  • DCL(数据控制语言)负责处理「权限」。
  • TCL(事务控制语言)负责处理事务。

本文讲解其中非常重要的一类——DDL(Data Definition Language,数据定义语言)。

DDL 总共有五个指令:CREATE、ALTER、TRUNCATE、DROP、RENAME。

DDL 是什么? 跟 DML 有什么不同?

简单来说,DDL 就是用来处理表格「结构」的指令。

什么是表格的结构? 就是有几个字段、字段叫什么名字、每个字段的数据类型是什么这些事情。

我们用一个例子来说明。

假设有一张 employee 表格,长这样:

ID 名称 部门 薪资
1 爱丽丝 HR 50000
2 鲍勃 IT 60000

这张表格有两个面向:

  1. 结构面 :有 4 个字段(ID、Name、Department、Salary),每个字段有各自的数据型态。
  2. 资料面 :有 2 笔资料(Alice 和 Bob 的纪录)。

如果你要「新增一个字段」或「把整张表格删掉」,这就是在修改结构,属于 DDL。

如果你要「把 Bob 的薪水从 60000 改成 70000」,这就是在操作数据,属于 DML。

DDL 指令的重要特性:自动提交(Auto Commit)

在学五个指令之前,有一个很重要的观念要先知道。

什么是 COMMIT 和 ROLLBACK

在数据库的世界里,你对数据做的每一个操作,并不会马上永久储存。

这些操作会先暂时存在一个「临时事务区」里,等你确认没问题之后,再用 COMMIT(提交)指令把修改永久写进数据库。

如果你做到一半发现改错了,还可以用 ROLLBACK(回滚)指令,把所有还没提交的修改通通撤销,回到上一次 COMMIT 的状态。

你可以把它想像成在用 Git:

你在本地改了一堆代码,这些修改还只是停留在工作目录里,还没有被记录下来。

当你执行 git commit,修改就被正式提交了,这就是 COMMIT。

但如果你改到一半发现改错了,可以用 git checkout 把文件还原回上一次 commit 的状态,这就是 ROLLBACK。

DDL 的自动提交

但 DDL 指令比较特别,它执行后会自动提交(Auto Commit)。

类型 执行后能否 ROLLBACK 需要手动 COMMIT 吗
DML 可以,还没 COMMIT 前都能复原 需要,要自己按「储存」
DDL 不行,执行就生效 不需要,系统自动帮你“储存”

也就是说,DDL 执行后会自动提交,修改立即生效并持久化,修改立刻生效并且永久储存, 无法通过 ROLLBACK 撤销 。

所以在执行 DDL 指令之前,一定要想清楚再动手,特别是 TRUNCATE 和 DROP 这种破坏性的操作。

CREATE——建立新表格

CREATE 是用来「从零开始建立一张表格」的指令。

假设现在库里什么都没有,我想建立一张有 4 个字段 employee 表格。

语法长这样:

CREATE TABLE employee ( ID NUMBER, Name VARCHAR2(50), Department VARCHAR2(50), Salary NUMBER );

执行之后,数据库就会多出一张叫做 employee 的表格,里面有 4 个字段。

ID 名称 部门 薪资

为什么 CREATE 是 DDL 指令? 因为它在定义表格的结构:有几个字段、字段叫什么、数据型态是什么。

这些全部都是结构层面的事情。

ALTER——修改现有表格的结构

假设你已经建好了 employee 表格,但后来发现少了一个 Gender 字段。

这时候你不需要把表格删除重建,只要用 ALTER 就可以了。

ALTER 可以做三件事:

新增字段

ALTER TABLE employee ADD (Gender VARCHAR2(10));

这样 employee 表格就会从 4 个字段变成 5 个字段。

ID 名称 部门 薪资 性别
1 爱丽丝 HR 50000
2 鲍勃 IT 60000

删除字段

ALTER TABLE employee DROP COLUMN Gender;

如果某个字段不需要了,可以用这个方式把它移除。

ID 名称 部门 薪资
1 爱丽丝 HR 50000
2 鲍勃 IT 60000

修改字段的数据类型

ALTER TABLE employee MODIFY (Name VARCHAR2(100));

例如原本 Name 栏位最多只能存 50 个字符,现在想改成 100 个字符。

不管是新增、删除还是修改字段,ALTER 都是在动表格的结构,所以它也是 DDL 指令。

TRUNCATE——清空表格里的所有数据

TRUNCATE 的作用是「把表格里的数据全部删光,但保留表格本身」。

语法很简单:

TRUNCATE TABLE student;

我们用一个例子来看。

假设有一张 student 表格:

ID 名称
1 爱丽丝
2 鲍勃
3 卡萝尔

执行 TRUNCATE TABLE student; 之后,表格会变成:

ID 名称

资料全部不见了,但表格还在。

你之后还是可以新增数据、新增字段,做任何操作,因为表格本身并没有被删除。

要特别注意的是,TRUNCATE 是 DDL 指令,所以它会自动提交, 执行后无法回滚。

在按下 Enter 之前,请务必确认你真的要清空这张表格。

TRUNCATE 和 DELETE 有什么不同?

看到这里你可能会想:「等一下,DML 里面不是也有一个 DELETE 指令可以删资料吗? 那它跟 TRUNCATE 差在哪?」

确实,DELETE 也可以删除表格里的数据,但两者的运作方式完全不同。

DELETE 是一条一条删除数据,而且可以加上 WHERE 条件,只删除符合条件的特定几条。

例如只删除名字是 Alice 的那笔纪录:

DELETE FROM student WHERE Name = ‘Alice’;

而 TRUNCATE 是一口气把整张表格的数据全部清掉,没办法指定条件。

另外,因为 DELETE 是 DML 指令,执行后还可以用 ROLLBACK 来撤销。

但 TRUNCATE 是 DDL 指令,执行后就自动提交了,完全没有撤销的机会。

比较项目 TRUNCATE(DDL) 删除(DML)
删除范围 只能清空全部资料 可以用 WHERE 指定条件
执行速度 较快 较慢(逐笔处理)
能否 回滚 不能(Auto Commit) 可以(还没 COMMIT 前都能恢复)
表格结构 保留 保留

DROP——把整张表格彻底删除

DROP 和 TRUNCATE 很像,但更加彻底。

语法也很简单:

DROP TABLE student;

同样用 student 表格来举例。

执行 DROP TABLE student; 之后,不只数据没了,连表格本身、索引、所有相关的东西都会从数据库中完全消失 。

SQL 中 TRUNCATE 和 DROP 的差别

这两个指令很容易搞混,用一张表格来比较:

比较项目 TRUNCATE DROP
资料 全部删除 全部删除
表格结构 保留 一并删除
执行后能否继续操作 可以,表格还在 不行,表格已经不存在了
能否复原 不能(Auto Commit) 不能(Auto Commit)

简单记:TRUNCATE 是「清空」,DROP 是「销毁」。

RENAME——重新命名表格

RENAME 是用来「把表格换一个名字」的指令。

语法就像一句英文:

RENAME student TO student_info;

执行之后,原本叫 student 的表格就会变成 student_info。

表格里面的字段和数据完全不会改变,只有名字不一样了。

为什么 RENAME 也是 DDL? 因为字段是跟着表格名称走的。

当你改了表格名称,等于改变了整个表格的结构定义,所以它也属于 DDL。

DDL 五个指令重点整理

这篇文章介绍了 DDL 的五个指令:

  1. CREATE:建立新的表格。
  2. ALTER:修改现有表格的结构(新增字段、删除字段、修改数据类型)。
  3. TRUNCATE:清空表格的所有数据,但保留表格结构。
  4. DROP:把整张表格从数据库中彻底删除。
  5. RENAME:重新命名表格。

最重要的一点是,DDL 指令都具有自动提交(Auto Commit) 的特性,一旦执行就无法复原。

原创文章,作者:余初云,如若转载,请注明出处:https://blog.jidcy.com/jsjc/2663.html

Like (1)
Previous 2026年5月13日 上午10:06
Next 2026年5月14日

相关推荐

  • 如何在CentOS和Fedora操作系统上设置时区和NTP?

    对于服务器管理员来说,正确配置和维护服务器上的时间是很重要的。错误的时间配置将导致服务器环境混乱,例如数据不一致、数据同步失败和作业调度等问题。为了避免这些情况,首先需要在服务器上…

    2026年5月28日
    0
  • 如何检查RAID阵列运行状态

    检查RAID阵列运行状态需要区分软件RAID和硬件RAID两类场景,不同场景对应不同的专属检查方法,以下是具体操作步骤: 一、软件RAID(mdadm管理)检查方法 ‌查看实时运行…

    2026年8月6日
    0
  • 什么是 SSH?理解 SSH 及其加密技术

    远程连接服务器这件事,在没有加密的年代风险极高。用户名、密码、每一条执行的命令,全部明文跑在网络上,同一局域网里的人抓个包就能看清楚。Telnet 和 Rlogin 就是那时候的主…

    2026年4月14日
    0
  • 一文读懂 WebP 图像格式是什么?

    许多网站开始采用一种名为 WebP 的新图像格式。它究竟是什么,又为何比其他格式更有优势? WebP 是谷歌收购 On2 Technologies 后开发的图像格式,基于 VP8 …

    2026年4月11日
    0
  • 什么是 XSS 攻击?一文搞懂跨站脚本攻击与防护方式

    XSS,三个让安全人员头疼的字母。它的全名是 Cross-Site Scripting,中文叫做跨站脚本攻击。你可能会问:“Cross-Site Scripting 的缩写不是应该…

    2026年5月14日
    0
  • 网络信息安全是什么?要如何做?

    网络信息安全即网络空间中的信息安全保障,是指网络体系的硬件配置、软件程序及其体系内的数据获得有效防护,免受偶然性或恶意性因素的损毁、篡改、泄露,确保体系持续稳定正常运作,网络服务持…

    2026年6月30日
    0
  • 如何更新服务器CentOS版本?

    老版本系统一旦被官方”抛弃”,就再也收不到安全补丁了,如果继续使用这类过期系统,不法分子很容易利用系统漏洞发起攻击,轻则破坏服务器正常运行,重则窃取内部核心…

    2026年5月12日
    0
  • 60个你必须知道的Linux命令:新手10分钟速通指南

    刚开始接触Linux的时候,很多人有一个共同的感受: “看别人操作都行云流水,自己一进终端就发懵。” 不是你笨,也不是Linux故意为难你——只是你可能还没捋清楚,那些最常用的命令…

    2026年4月10日
    0
  • 云服务器出现CPU负荷过载如何应对?

    服务器这类设备,引发其CPU使用率过载的原因是多方面的。一旦出现这种状况,服务器的响应速度便会随之变慢,我们都清楚卡机是怎样一种体验,在这里也可以将其理解为云服务器陷入了一种卡顿、…

    2026年7月25日
    0
  • web服务器各类状态码盘点

    我们都清楚,访问网站的过程实质上就是向web服务器发送请求消息,web服务器接收到消息之后会向我们返给相应的响应消息,有时候这类响应消息当中会附带出现一串数字,其目的正是为了告知我…

    2026年7月14日
    0