详解数据库 SQL 中的三个语句:DROP、TRUNCATE 、DELETE
本文分享自华为云社区《GaussDB数据库SQL系列-DROP & TRUNCATE & DELETE》,作者:Gauss 松鼠会小助手 2 。
一、前言
在数据库中,SQL 作为一种常用的数据库编程语言,扮演着至关重要的角色。SQL 不仅可以用于创建、修改和查询数据库,还可以通过 DROP、DELETE 和 TRUNCATE 等语句来删除数据。这些语句是 SQL 语言中的最常用的命令,且它们有着不同的含义和使用场景。
本文以 GaussDB 数据库为平台,将详细介绍 SQL 中 DROP、TRUNCATE 和 DELETE 等语句的含义、使用场景以及注意事项,帮助读者更好地理解和掌握这些常用的数据库操作命令。
二、GaussDB 的 DROP & TRUNCATE & DELETE 简述
1、简述
• DROP 语句可以删除整个表,包括表结构和数据;
• TRUNCATE 语句则可以快速地删除表中的所有数据,但不删除表结构。
• DELETE 语句可以删除表中的数据,不包括表结构;
2、命令比对
Tip:在 GaussDB 数据库中,DROP 是用于定义或修改数据库中的对象的命令之一。对象主要包括:库、模式、表空间、表、索引、视图、存储过程、函数、加密秘钥等,本次只针对其对表的操作。
三、GaussDB 的 DROP TABLE 命令及示例
1、功能描述
DROP TABLE 的功能是用来删除已存在的 Table。
2、语法
说明:SQL 中加[IF EXISTS] ,可以防止因表不存在而导致执行报错。
参数:db_name:Database 名称。如果未指定,将选择当前 database。table_name:需要删除的 Table 名称。
3、示例
以下示例演示 DROP 命令的使用,依次执行如下 SQL 语句:
1)DROP TABLE,提示表不存在
2)创建并初始化一张实验表
3)DROP TABLE 执行成功
4)查看执行结果
四、GaussDB 的 TRUNCATE 命令及示例
1、功能描述
从表或表分区中移除所有数据,TRUNCATE 快速地从表中删除所有行。它和在目标表上进行无条件的 DELETE 有同样的效果,但由于 TRUNCATE 不做表扫描,因而快得多, 且使用的系统和事务日志资源少。在大表上操作效果更明显。
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。
2、语法
或
参数:table_name:需要删除数据的 Table 名称。partition_name:需要删除的分区表的分区名称。partition_value:需要删除的分区表的分区值。
3、示例 1
以下示例演示 TRUNCATE 命令的使用:
1)创建实验表并初始化数据
2)TRUNCATE TABLE 执行成功
3)查看执行结果
4、示例 2
以下示例演示 TRUNCATE 命令的删除分区表数据
1)创建实验表并初始化
2)根据分区进行删数据
五、GaussDB 的 DELETE 命令及示例
1、功能描述
从指定的表里删除满足 WHERE 子句的行。如果 WHERE 子句不存在,将删除表中所有行,结果只保留表结构。
2、注意事项
• 不支持 DELETE 语句中使用 LIMIT。应使用 WHERE 条件明确需要更新的目标行。
• 不支持在单条 SQL 语句中,对多个表进行删除。
• DELETE 语句中必须有 WHERE 子句,避免全表扫描。
• DELETE 语句中禁止不应使用 ORDER BY、GROUP BY 子句,避免不必要的排序。
• 如果需要清空一张表,建议使用 TRUNCATE,而不是 DELETE。
• TRUNCATE 会创建新的物理文件,并在事务结束时将原文件物理删除,清空磁盘空间。而 DELETE 会将表中数据进行标记,直到 VACCUUM FULL 阶段才会真正清理磁盘空间。
• DELETE 有主键或索引的表,WHERE 条件应结合主键或索引,提高执行效率。
• DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
• 如果想保留标识计数值,请改用 DELETE
3、语法
参数:table_name:需要删除数据的 Table 名称。condition:用于判断哪些行需要被删除。
4、示例
复用前面的实验表:
1)删除 orders 表中 customer_id <200 的所有数据:
六、应用场景
• 需要根据一定的业务条件删除数据时、且数据量、性能可控的情况下,可以考虑使用 DELETE。
• 需要删除大批量数据时,同时要求速度快,效率高并且无需撤销时,可以使用 TRUNCATE。
• 在企业级开发中,实际上都是进行逻辑删除(将数据进行“删除标识”处理)、而并不进行物理上的删除。
• 在实际生产环境中,一般情况下删除业务处理(过渡表)中的数据。
• 在实际企业开发、维护过程中,不管使用 DELETE、TRUNCATE 还是 DROP 命令前,都要考虑数据的备份。
七、小结
在 GaussDB 等数据库中,DROP、TRUNCATE 和 DELETE 均是常用的删除数据的命令。但在实际业务使用中,需要根据不同的需求进行准确的选择,但无论选择那种删数方式,都需要考虑数据安全性——重要的事情说三遍:备份!备份!备份!
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/492b8a324e55c779737520003】。文章转载请联系作者。
评论