GaussDB数据库SQL系列:DROP & TRUNCATE & DELETE

2023-08-25 09:32:41

目录

一、前言

二、GaussDB的 DROP & TRUNCATE & DELETE 简述

1、命令简述

2、命令比对

三、GaussDB的DROP TABLE命令及示例

1、功能描述

2、语法

3、示例

四、GaussDB的TRUNCATE命令及示例

1、功能描述

2、语法

3、示例

4、示例

五、GaussDB的DELETE命令及示例

1、功能描述

2、注意事项

3、语法

4、示例

六、应用场景

七、小结

一、前言

在数据库中,SQL作为一种常用的数据库编程语言,扮演着至关重要的角色。SQL不仅可以用于创建、修改和查询数据库,还可以通过DROP、DELETE和TRUNCATE等语句来删除数据。这些语句是SQL语言中的最常用的命令,且它们有着不同的含义和使用场景。

本文以GaussDB数据库为平台,将详细介绍SQL中DROP、TRUNCATE和DELETE等语句的含义、使用场景以及注意事项,帮助读者更好地理解和掌握这些常用的数据库操作命令。

二、GaussDB的 DROP & TRUNCATE & DELETE 简述

1、简述

  • DROP语句可以删除整个表,包括表结构和数据等;
  • TRUNCATE语句则可以快速地删除表中的所有数据,但不删除表结构。
  • DELETE语句可以根据条件删除表中的数据,但不包括表结构;

2、命令比对

大类

DROP

TRUNCATE

DELETE

SQL类型

DDL

DDL

DML

删除内容

删除表的所有数据,包括表结构、索引和权限等

删除表中所有数据,或指定分区的数据

删除表的全部或部分(+条件)数据

执行速度

速度最快

速度中等

速度最慢

Tip:在GaussDB数据库中,DROP是用于定义或修改数据库中的对象的命令之一。对象主要包括:库、模式、表空间、表、索引、视图、存储过程、函数、加密秘钥等,本次只针对表的操作。

三、GaussDB的DROP TABLE命令及示例

1、功能描述

DROP TABLE的功能是用来删除已存在的Table。

2、语法

DROP TABLE [IF EXISTS] [db_name.]table_name;

说明:SQL中加[IF EXISTS] ,可以防止因表不存在而导致执行报错。

参数:db_name:Database名称。如果未指定,将选择当前database。table_name:需要删除的Table名称。

3、示例

以下示例演示DROP命令的使用,依次执行如下SQL语句:

--删除整个表course
DROP TABLE IF EXISTS course

--创建course表
CREATE TABLE course(cid VARCHAR(10),cname VARCHAR(10),teid VARCHAR(10));

--初始化数据
INSERT INTO course VALUES('01' , '语文' , '02');
INSERT INTO course VALUES('02' , '数学' , '01');
INSERT INTO course VALUES('03' , '英语' , '03');

--3条记录
SELECT count(1) FROM  course;

--删除整个表
DROP TABLE IF EXISTS course

--查看结果,表不存在(表结构及数据不存在)
SELECT count(1) FROM  course;

1)DROP TABLE,提示表不存在

2)创建并初始化一张实验表

3)DROP TABLE 执行成功

 

4)查看执行结果

四、GaussDB的TRUNCATE命令及示例

1、功能描述

从表或表分区中移除所有数据,TRUNCATE快速地从表中删除所有行。它和在目标表上进行无条件的DELETE有同样的效果,但由于TRUNCATE不做表扫描,因而快得多, 且使用的系统和事务日志资源少。在大表上操作效果更明显。

TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。

2、语法

TRUNCATE [TABLE] table_name;

ALTER TABLE [IF EXISTS] table_name  TRUNCATE PARTITION { partition_name | FOR (  partition_value  [, ...] ) }

参数:table_name:需要删除数据的Table名称。partition_name:需要删除的分区表的分区名称。partition_value:需要删除的分区表的分区值。

3、示例1

以下示例演示TRUNCATE命令的使用:

--创建course表
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 course VALUES('02' , '数学' , '01');
INSERT INTO course VALUES('03' , '英语' , '03');

--3条记录
SELECT count(1) FROM  course;

--清空表
TRUNCATE TABLE course;
--或
TRUNCATE course;

--0条记录
SELECT count(1) FROM  course;

1)创建实验表并初始化数据

 2)TRUNCATE TABLE执行成功

 3)查看执行结果

4、示例2

以下示例演示TRUNCATE命令的删除分区表数据

--创建列表分区(LIST)
DROP TABLE IF EXISTS orders;
CREATE TABLE orders (
    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,date'20230822',1,10);
INSERT INTO orders(id,customer_id,order_date,product_id,quantity)VALUES(1002,100,date'20230822',2,20);
INSERT INTO orders(id,customer_id,order_date,product_id,quantity)VALUES(1003,100,date'20230822',3,30);
INSERT INTO orders(id,customer_id,order_date,product_id,quantity)VALUES(1004,200,date'20230822',4,40);

--查看分区p1、p2的数据
SELECT * FROM orders WHERE customer_id IN (100,200);
--或
--根据分区名称查询
SELECT * FROM  orders PARTITION(p2);

--清空分区p1。
ALTER TABLE orders TRUNCATE PARTITION p1;
--或者
--清空分区p2=200。
ALTER TABLE orders TRUNCATE PARTITION for (200);

--查看分区p1、p2的数据
SELECT * FROM orders WHERE customer_id IN (100,200);

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、语法

DELETE FROM table_name [WHERE condition];

参数:table_name:需要删除数据的Table名称。condition:用于判断哪些行需要被删除。

4、示例

复用前面的实验表:

DELETE FROM orders WHERE  customer_id <200;

1)删除orders表中customer_id <200的所有数据:

六、应用场景

  • 需要根据一定的业务条件删除数据时、且数据量、性能可控的情况下,可以考虑使用 DELETE。
  • 需要删除大批量数据时,同时要求速度快,效率高并且无需撤销时,可以使用 TRUNCATE。
  • 在企业级开发中,实际上都是进行逻辑删除(将数据进行“删除标识”处理)、而并不进行物理上的删除。
  • 在实际生产环境中,一般情况下删除业务处理(过渡表)中的数据。
  • 在实际企业开发、维护过程中,不管使用 DELETE、TRUNCATE还是DROP命令前,都要考虑数据的备份。

七、小结

在GaussDB等数据库中,DROP、TRUNCATE和DELETE均是常用的删除数据的命令。但在实际业务使用中,需要根据不同的需求进行准确的选择,但无论选择那种删数方式,都需要考虑数据安全性——重要的事情说三遍:备份!备份!备份!

——结束。

更多推荐

互联网数字化管理升级,制造企业一站式智能管理,可定制-亿发

在互联网时代,传统机械制造企业面临着未有的挑战和机遇。信息化管理水平成为企业竞争力的关键因素。然而,许多制造企业在信息化管理中常常陷入以下三大问题:1、盲目随潮流,缺乏总体规划互联网时代,科技发展日新月异,让制造企业感到需要跟上潮流。然而,盲目跟风而行往往导致了技术的不合理使用和资源的浪费。解决这个问题的关键在于建立明

运维:Centos7安装解压版mysql5.7

目录1、卸载Centos7默认自带的mariadb数据库,避免冲突2、下载解压版mysql并安装3、配置mysql4、mysql客户端访问MySQL是一种开源的关系型数据库管理系统(RDBMS),它具有许多优点和一些缺点。以下是MySQL的主要优缺点:优点1.开源免费:MySQL是开源软件,可以免费使用,并且有大量的社

机器视觉常见的问题及解决

应该怎样选择相机?选择相机却往往刻不容缓的的问题摆在机器视觉工程师面前,因此,选择相机了解以下几个方面问题:通常您首先需要知道系统精度要求和相机分辨率,可以通过公式:X方向系统精度(X方向像素值)=视野范围(X方向)/CCD芯片像素数量(X方向);Y方向系统精度(Y方向像素值)=视野范围(Y方向)/CCD芯片像素数量(

面试失败的反思:如何从错误中吸取教训

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🦄博客首页——🐅🐾猫头虎的博客🎐🐳《面试题大全专栏》🦕文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》🐾学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》🐅学会Gol

服务器搭建(TCP套接字)-epoll版(服务端)

epoll是一种在Linux系统上用于高效事件驱动编程的I/O多路复用机制。它相比于传统的select和poll函数具有更好的性能和扩展性。epoll的主要特点和原理:1、事件驱动:epoll是基于事件驱动的模型,它通过监听事件来触发相应的回调函数,而不是像传统的阻塞模型那样持续轮询。这样可以避免无效的轮询操作,提高效

开源项目在面试中的作用:如何用你的贡献加分

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🦄博客首页——🐅🐾猫头虎的博客🎐🐳《面试题大全专栏》🦕文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》🐾学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》🐅学会Gol

STM32F4X UCOSIII 消息队列

STM32F4XUCOSIII消息队列消息队列消息队列的作用消息队列工作机制消息队列创建消息发送消息发送模式FIFO(先进先出)LIFO(后进先出)消息接收消息队列删除消息队列常用函数消息队列创建函数消息队列发送函数消息队列接收函数消息队列删除函数UCOSIII消息队列例程消息队列消息队列的作用消息队列是一种常用于任务

全渠道零售趋势——现代零售业成功的关键

在快节奏的零售时代,无论通过什么渠道购物,消费者越来越习惯无缝购物体验。因此,保持线上和线下购物体验的一致性有助于在品牌与购物者之间建立信任,这也是每个零售商的首要任务。在本文中,我们将介绍现代零售业成功的关键——全渠道零售趋势,帮助零售商实现现代零售业的成功。什么是全渠道零售体验?全渠道零售是一种使零售商能够在所有渠

孙宇晨:稳定币支付交易具百倍增长潜力 后FTX时代行业仍需修炼内功

9月14日,波场TRON创始人、火币HTX全球顾问委员会成员孙宇晨受邀出席于新加坡举办的TOKEN2049,并参加了“生态系统和行业增长:展望加密货币的未来十年”主题板块的讨论。孙宇晨在发言中表示,接下来的10年里,加密货币和区块链的最大日常应用场景仍然是稳定币支付交易,预计将有百倍规模增长。他同时指出,一系列风险事件

RISC-V架构学习——C语言内嵌汇编总结

1、C语言内嵌汇编的作用(1)优化:对于特别重要代码进行优化,出于性能的考虑;(2)C语言需要借助汇编指令来实现特殊功能。比如:C语言中访问系统寄存器就需要借助CSR指令;2、基础内嵌汇编2.1、基础内嵌汇编格式asmasm-qualifiers(AssemblerInstructions)关键字含义asm这是内嵌汇编

欧科云链研究院:锚定金融市场,香港从STO再出发

作者|HedyBi昨日,据大公报报道,太极资本宣布推出香港首个面向「专业投资者」的房地产基金证券型代币发行(STO)。集资目标为1亿元。“牌照,醉翁之意不在酒。BTC、ETH等加密资产只是第一步,而背后暗藏的玄机,则是整个金融市场。”“在合规之前,我们看到行业更多是冒出来的是例如NFT、DeFi这类原生的项目。合规之后

热文推荐