大家好,今天小编来为大家解答数据库SQL中三个语句详解:DROP、TRUNCATE、DELETE这个问题,很多人还不知道,现在让我们一起来看看吧!
• TRUNCATE 语句可以快速删除表中的所有数据,但不删除表结构。
• DELETE 语句可以删除表中的数据,不包括表结构;
2、命令比对
类别
降低
截短
删除
SQL类型
数据定义语言
数据定义语言
数据管理语言
删除内容
删除表中所有数据,包括表结构、索引、权限等。
删除表中所有数据,或指定分区中的数据
删除表的全部或部分(+条件)数据
执行速度
最快
中速
最慢的
提示:在GaussDB数据库中,DROP是用于定义或修改数据库中对象的命令之一。对象主要包括:库、模式、表空间、表、索引、视图、存储过程、函数、加密密钥等。这次我们只关注对表的操作。
三、GaussDB的DROP TABLE命令及示例
1、功能描述
DROP TABLE 的功能是删除现有的表。
2、语法
删除表[如果存在] [db_name.]table_name;说明:在SQL中添加[IF EXISTS]可以防止因表不存在而导致的执行错误。
参数: db_name:数据库名称。如果未指定,将选择当前数据库。 table_name:要删除的表的名称。
3、示例
以下示例演示了DROP 命令的使用,依次执行以下SQL 语句:
–删除整个表courseDROP TABLE IF EXISTS course–创建课程表CREATE TABLE course(cid VARCHAR(10),cname VARCHAR(10),teid VARCHAR(10));–初始化数据INSERT INTO course VALUES(’01) ‘ , ‘中文’ , ’02’);INSERT INTO 课程值(’02’ , ‘数学’ , ’01’);INSERT INTO 课程值(’03’ , ‘英语’ , ’03’);–3 items Record SELECT count(1) FROM course;–删除整个表DROP TABLE IF EXISTS course–查看结果,表不存在(表结构和数据都不存在) SELECT count(1) FROM course;
1)DROP TABLE,提示表不存在
2)创建并初始化一张实验表
:010 -1010
3)DROP TABLE 执行成功
4)查看执行结果
四、GaussDB的TRUNCATE命令及示例
从表或表分区中删除所有数据,TRUNCATE 快速删除表中的所有行。它与对目标表执行无条件DELETE 具有相同的效果,但由于TRUNCATE 不执行表扫描,因此速度更快,并且使用更少的系统和事务日志资源。在大表上操作效果更加明显。
TRUNCATE TABLE 删除表中的所有行,但保留表结构及其列、约束、索引等不变。用于标识新行的计数将重置为该列的种子。
1、功能描述
TRUNCATE [TABLE] 表名;或
ALTER TABLE [IF EXISTS] 表名TRUNCATE PARTITION { 分区名| 分区名FOR (partition_value [,] ) } 参数: table_name:需要删除数据的表的名称。 partition_name:需要删除的分区表的分区名称。 partition_value:需要删除的分区表的分区值。
2、语法
以下示例演示了TRUNCATE 命令的用法:
–创建课程表DROP TABLE IF EXISTS course;CREATE TABLE course(cid VARCHAR(10),cname VARCHAR(10),teid VARCHAR(10));–初始化数据INSERT INTO course VALUES(’01’, ‘中文’ , ’02’);INSERT INTO 课程VALUES(’02’ , ‘数学’ , ’01’);INSERT INTO 课程VALUES(’03’ , ‘英语’ , ’03’);–3 条记录SELECT count( 1 ) FROM course;–清表TRUNCATE TABLE course;–或TRUNCATE course;–0 条记录SELECT count(1) FROM course;
3、示例1
1)创建实验表并初始化数据
2)TRUNCATE TABLE执行成功
3)查看执行结果
下面的示例演示了TRUNCATE 命令删除分区表数据
–创建列表分区(LIST) DROP TABLE IF EXISTS 订单;CREATE TABLE 订单(id INT PRIMARY KEY,customer_id INT,order_date DATE,product_id INT,quantity INT) PARTITION BY LIST (customer_id) (PARTITION p1 VALUES (100),PARTITION p2 VALUES (200),PARTITION p3 VALUES (300),PARTITION p4 VALUES (400),PARTITION p5 VALUES (500));–插入测试数据INSERT INTO Orders(id,customer_id,order_date,product_id,quantity)VALUES(1001 ,100,日期’20230822′,1,10);插入订单(id,customer_id,order_date,product_id,数量)值(1002,100,日期’20230822′,2,20);插入订单(id,customer_id ,order_date,product_id,数量)VALUES(1003,100,date’20230822′,3,30);插入订单(id,customer_id,order_date,product_id,quantity)VALUES(1004,200,date’20230822′,4, 40);–查看分区p1和p2的数据SELECT * FROMorders WHERE customer_id IN (100,200);–或者–根据分区名称查询SELECT * FROMordersPARTITION(p2);–清除分区p1。 ALTER TABLE 命令TRUNCATE PARTITION p1;–或–清除分区p2=200。 ALTER TABLE Orders TRUNCATE PARTITION for (200);–查看分区p1和p2的数据SELECT * FROMorders WHERE customer_id IN (100,200);
4、示例2
1)创建实验表并初始化
2)根据分区进行删数据
五、GaussDB的DELETE命令及示例
从指定表中删除满足WHERE 子句行的表。如果WHERE子句不存在,表中的所有行都会被删除,只留下表结构。
1、功能描述
• DELETE 语句中不支持LIMIT。应使用WHERE 条件来指定需要更新的目标行。
• 不支持在单个SQL 语句中删除多个表。
• DELETE 语句必须有WHERE 子句以避免全表扫描。
• 禁止在DELETE 语句中使用ORDER BY 和GROUP BY 子句,以避免不必要的排序。
• 如果需要清除表,建议使用TRUNCATE 而不是DELETE。
• TRUNCATE 将创建一个新的物理文件,并在事务结束时物理删除原始文件以清除磁盘空间。 DELETE会对表中的数据进行标记,直到VACCUUM FULL阶段才会真正清除磁盘空间。
• 删除带有主键或索引的表。 WHERE条件应与主键或索引结合使用,以提高执行效率。
• DELETE 语句一次删除一行,并在事务日志中为删除的每一行记录一个条目。
• 如果要保留身份计数值,请改用DELETE
2、注意事项
DELETE FROM table_name [WHERE 条件];参数: table_name:需要删除数据的表的名称。条件:用于确定哪些行需要删除。
3、语法
重用之前的实验表:
1)删除orders表中customer_id 200的所有数据:
从customer_id 200 的订单中删除;
4、示例
• 当根据一定的业务情况需要删除数据,且数据量和性能可控时,可以考虑使用DELETE。
• 当需要删除大量数据、速度快、效率高且无需撤消时,可以使用TRUNCATE。
• 在企业级开发中,实际执行的是逻辑删除(数据被“标记为删除”),而不是物理删除。
• 实际生产环境中,业务处理中的数据(转换表)一般会被删除。
• 在实际的企业开发和维护过程中,在使用DELETE、TRUNCATE或DROP命令之前必须考虑数据备份。
六、应用场景
在GaussDB等数据库中,DROP、TRUNCATE和DELETE是常用的删除数据的命令。但在实际业务使用中,需要根据不同的需求做出准确的选择。但无论选择哪种数据删除方式,都需要考虑数据安全。 —— 重要的事情说三遍:备份!备份!备份!
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/120197.html
用户评论
伤离别
这个文章解释的很清楚!我之前一直分不清DROP和TRUNCATE的区别,看着表名就懵了!这简直就是数据库入门必读啊~
有20位网友表示赞同!
*巴黎铁塔
刚开始接触数据库,这些SQL语句感觉有点抽象,看这篇的文章后终于明白了它们的功能区别。感谢分享!
有10位网友表示赞同!
你与清晨阳光
总结的很好,很实用!我之前总是用DELETE来清空表数据,现在才知道TRUNCATE更有效率啊!
有9位网友表示赞同!
该用户已上天
文章写得真专业,看得懂,但还是建议加上一些图示进行比喻,能帮助更直观的理解。
有10位网友表示赞同!
拥菢过后只剰凄凉
DROP好可怕啊,直接把表结构都删了!平时使用的时候真的要小心谨慎啊。
有20位网友表示赞同!
浅笑√倾城
学习了一下数据库的常用语句,感觉DROP和TRUNCATE确实容易混淆,尤其是 DROP TABLE 这么强大的命令,一定要慎重操作。这篇文章提醒了我需要更加仔细了解这些语句的使用场景。
有10位网友表示赞同!
你很爱吃凉皮
DELETE 和 TRUNCATE 的区别点不太明白…
有5位网友表示赞同!
断桥残雪
文章挺详细的,把每个语句的特点和实际应用都给讲解了。但是我个人还是更喜欢看一些代码实例啊,感觉更能理解语句的效果!
有20位网友表示赞同!
余笙南吟
对数据库操作还比较浅薄,这篇文章正好填补了我的一些知识空白! 学习编程真的需要不断积累呀!
有10位网友表示赞同!
墨城烟柳
这篇帖子真是太棒了!我一直在学习SQL,这三个语句就一直让我困惑。 现在终于明白了它们的用法区别!
有8位网友表示赞同!
艺菲
TRUNCATE和DELETE的区别很关键啊!以后尽量用TRUNCATE清空数据,因为它效率更高。感谢分享!
有20位网友表示赞同!
半梦半醒半疯癫
我觉得DROP应该作为最后的手段使用,如果要删除表的话,先备份一下好点.
有16位网友表示赞同!
如梦初醒
数据库管理对我很重要但是我一直在学习这些语句的使用方法,这篇博文总结的很清楚 ,感谢您的指教!
有7位网友表示赞同!
炙年
文章写的不错,可以作为小白学习SQL语法基础的参考教材。
有11位网友表示赞同!
。婞褔vīp
这篇文章真是太棒了!!帮我解决了关于DROP、TRUNCATE和DELETE语句问题!以后数据库操作我再也不用犯错啦~
有16位网友表示赞同!
别留遗憾
我觉得对于初学者来说,文章中的一些概念可能比较抽象难懂啊!希望可以加上一些通俗易懂的例子解释!
有7位网友表示赞同!
灬一抹丶苍白
感觉这篇文章更偏向于对 SQL 语句功能介绍,如果能结合实际案例说明,更加实用可行!
有11位网友表示赞同!
冷青裳
写得真好!我一直以来都不太清楚数据库SQL中的DELETE、TRUNCATE和DROP的区别,看了这篇博客就明白了!真棒!
有11位网友表示赞同!