当前位置:首页 > 数码 > 深化解析-MySQL-DELETE-中的删除语句-TRUNCATE-和-DROP (深入解析)

深化解析-MySQL-DELETE-中的删除语句-TRUNCATE-和-DROP (深入解析)

admin9个月前 (05-13)数码36

一、前言

在数据库中,SQL作为一种罕用的数据库编程言语,表演着至关关键的角色。SQL不只可以用于创立、修正和查问数据库,还可以经过DROP、DELETE和TRUNCATE等语句来删除数据。这些语句是SQL言语中的最罕用的命令,且它们有着不同的含意和经常使用场景。

本文以GaussDB数据库为平台,将具体引见SQL中DROP、TRUNCATE和DELETE等语句的含意、经常使用场景以及留意事项,协助读者更好地理解和把握这些罕用的数据库操作命令。

二、GaussDB的DROP&TRUNCATE&DELETE简述

1、简述

2、命令比对

大类

SQL类型

删除内容

删除表的一切数据,包含表结构、索引和权限等

删除表中一切数据,或指定分区的数据

删除表的所有或局部(+条件)数据

口头速度

速度最快

速度中等

速度最慢

Tip:在GaussDB数据库中,DROP是用于定义或修负数据库中的对象的命令之一。对象关键包含:库、形式、表空间、表、索引、视图、存储环节、函数、加密秘钥等,本次只针对其对表的操作。

三、GaussDB的DROPTABLE命令及示例

1、性能形容

DROPTABLE的性能是用来删除已存在的Table。

2、语法

DROPTABLE[IFEXISTS][db_name.]table_name;

说明:SQL中加[IFEXISTS],可以防止因表不存在而造成口头报错。

参数:db_name:Database称号。假设未指定,将决定以后database。table_name:须要删除的Table称号。

3、示例

以下示例展示DROP命令的经常使用,依次口头如下SQL语句:

--删除整个表courseDROPTABLEIFEXISTScourse--创立course表CREATETABLEcourse(cidVARCHAR(10),cnameVARCHAR(10),teidVARCHAR(10));--初始化数据INSERTINTOcourseVALUES('01','语文','02');INSERTINTOcourseVALUES('02','数学','01');INSERTINTOcourseVALUES('03','英语','03');--3条记载SELECTcount(1)FROMcourse;--删除整个表DROPTABLEIFEXISTScourse--检查结果,表不存在(表结构及数据不存在)SELECTcount(1)FROMcourse;

1)DROPTABLE,提醒表不存在

2)创立并初始化一张试验表

图片

3)DROPTABLE口头成功

4)检查口头结果

四、GaussDB的TRUNCATE命令及示例

1、性能形容

从表或表分区中移除一切数据,TRUNCATE极速地从表中删除一切行。它和在指标表上启动无条件的DELETE有雷同的成果,但由于TRUNCATE不做表扫描,因此快得多,且经常使用的系统和事务日志资源少。在大表上操作成果更清楚。

TRUNCATETABLE删除表中的一切行,但表结构及其列、解放、索引等坚持不变。新行标识所用的计数值重置为该列的种子。

2、语法

TRUNCATE[TABLE]table_name;

或:

ALTERTABLE[IFEXISTS]table_nameTRUNCATEPARTITION{partition_name|FOR(partition_value[,...])}

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

3、示例1

以下示例展示TRUNCATE命令的经常使用:

--创立course表DROPTABLEIFEXISTScourse;CREATETABLEcourse(cidVARCHAR(10),cnameVARCHAR(10),teidVARCHAR(10));--初始化数据INSERTINTOcourseVALUES('01','语文','02');INSERTINTOcourseVALUES('02','数学','01');INSERTINTOcourseVALUES('03','英语','03');--3条记载SELECTcount(1)FROMcourse;--清空表TRUNCATETABLEcourse;--或TRUNCATEcourse;--0条记载SELECTcount(1)FROMcourse;
MySQL

1)创立试验表并初始化数据

2)TRUNCATETABLE口头成功

3)检查口头结果

4、示例2

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

--创立列表分区(LIST)DROPTABLEIFEXISTSorders;CREATETABLEorders(idINTPRIMARYKEY,customer_idINT,order_dateDATE,product_idINT,quantityINT)PARTITIONBYLIST(customer_id)(PARTITIONp1VALUES(100),PARTITIONp2VALUES(200),PARTITIONp3VALUES(300),PARTITIONp4VALUES(400),PARTITIONp5VALUES(500));--拔出测试数据INSERTINTOorders(id,customer_id,order_date,product_id,quantity)VALUES(1001,100,date'20230822',1,10);INSERTINTOorders(id,customer_id,order_date,product_id,quantity)VALUES(1002,100,date'20230822',2,20);INSERTINTOorders(id,customer_id,order_date,product_id,quantity)VALUES(1003,100,date'20230822',3,30);INSERTINTOorders(id,customer_id,order_date,product_id,quantity)VALUES(1004,200,date'20230822',4,40);--检查分区p1、p2的数据SELECT*FROMordersWHEREcustomer_idIN(100,200);--或--依据分区称号查问SELECT*FROMordersPARTITION(p2);--清空分区p1。ALTERTABLEordersTRUNCATEPARTITIONp1;--或许--清空分区p2=200。ALTERTABLEordersTRUNCATEPARTITIONfor(200);--检查分区p1、p2的数据SELECT*FROMordersWHEREcustomer_idIN(100,200);

1)创立试验表并初始化

2)依据分区启动删数据

五、GaussDB的DELETE命令及示例

1、性能形容

从指定的表里删除满足WHERE子句的行。假设WHERE子句不存在,将删除表中一切行,结果只保管表结构。

2、留意事项

3、语法

DELETEFROMtable_name[WHEREcondition];

参数:table_name:须要删除数据的Table称号。condition:用于判别哪些行须要被删除。

4、示例

复用前面的试验表:

1)删除orders表中customer_id<200的一切数据:

DELETEFROMordersWHEREcustomer_id<200;

六、运行场景

七、小结

在GaussDB等数据库中,DROP、TRUNCATE和DELETE均是罕用的删除数据的命令。但在实践业务经常使用中,须要依据不同的需求启动准确的决定,但无论决定那种删数形式,都须要思考数据安保性——关键的事件说三遍:备份!备份!备份!


drop、truncate、delete三种删除的区别

drop:drop table 表名 (删除整个表)

删除内容和定义,并释放空间。执行drop语句,将使此表的结构一起删除。也就是删除整个表。操作不能回滚。

truncate:truncate table 表名(清空表中的所有数据)

删除内容、释放空间但不删除定义(也就是保留表的数据结构)。与drop不同的是,只是清空表数据而已。 truncate不能删除行数据,虽然只删除数据,但是比delete彻底,它只删除表数据。操作不能回滚。整表数据清空。

delete:delete from 表名 (where 列名 = 值) (删除一行数据)

与truncate类似,delete也只删除内容、释放空间但不删除定义;但是delete即可以对行数据进行删除,也可以对整表数据进行删除。delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行进行回滚操作。

原文链接:

详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始

相同点和不带where子句的delete、以及drop都会删除表内的数据。 、truncate都是DDL语句(数据定义语言),执行后会自动提交。 不同点:1. truncate 和 delete 只删除数据不删除表的结构(定义)drop 语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index);依赖于该表的存储过程/函数将保留,但是变为 invalid 状态。 2. delete 语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。 truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发 trigger。 语句不影响表所占用的 extent,高水线(high watermark)保持原位置不动drop 语句将表所占用的空间全部释放。 truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;truncate 会将高水线复位(回到最开始)。 4.速度,一般来说: drop> truncate > delete5.安全性:小心使用 drop 和 truncate,尤其没有备份的时候.否则哭都来不及使用上,想删除部分数据行用 delete,注意带上where子句. 回滚段要足够大.想删除表,当然用 drop想保留表而将所有数据删除,如果和事务无关,用truncate即可。 如果和事务有关,或者想触发trigger,还是用delete。 如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。 是DML语句,不会自动提交。 drop/truncate都是DDL语句,执行后会自动提交。 7、TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。 但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。 TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 8、TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。 新行标识所用的计数值重置为该列的种子。 如果想保留标识计数值,请改用 DELETE。 如果要删除表定义及其数据,请使用 DROP TABLE 语句。 9、对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。 由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。 10、TRUNCATE TABLE 不能用于参与了索引视图的表。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: MySQL

“深化解析-MySQL-DELETE-中的删除语句-TRUNCATE-和-DROP (深入解析)” 的相关文章

实用性极强的-MySQL-查询优化策略 (实用性极强的app)

实用性极强的-MySQL-查询优化策略 (实用性极强的app)

在程序上线运行一段时间后,一旦数据量上去了,或多或少会感觉到系统出现延迟、卡顿等现象,出现这种问题,就需要程序员或架构师进行系统调优工作了。其中,大量的实践经验表明,调优的手段尽管有很多,但涉及到...

Java开发者的MySQL数据库版本管理策略-从规划到部署的全面指南 (java开发工程师)

Java开发者的MySQL数据库版本管理策略-从规划到部署的全面指南 (java开发工程师)

数据库是软件开发中常用的关系型数据库之一。版本管理是保障数据库稳定性和可靠性的重要方面。本文将介绍针对 Java 开发者的 MySQL 数据库版本管理策略,包括版本控制工具选择、数据库脚本管理、变...

优化数据统计的终极指南-MySQL-提升查询性能的秘诀 (优化数据统计工具)

优化数据统计的终极指南-MySQL-提升查询性能的秘诀 (优化数据统计工具)

在业务场景中,我们经常需要统计当前已有的业务数据,例如商品库内商品的数量、每天的用户订单数量等。此时,我们需要使用统计功能来实现。 count()实现方式 对于不同的数据库引擎,co...

实战-MySQL-数据库压力测试与性能评估方法-Java (实战篮球鞋排名)

实战-MySQL-数据库压力测试与性能评估方法-Java (实战篮球鞋排名)

压力测试的目的和重要性 压力测试是模拟真实环境中并发用户访问数据库的场景,通过增加负载来测试数据库系统的性能表现。压力测试的目的是发现数据库在高负载下的性能瓶颈、资源利用情况和响应时间等指...

全面指南-如何解决-MySQL-主从延时问题 (全面指导)

全面指南-如何解决-MySQL-主从延时问题 (全面指导)

一、什么是主从延时? 主从延时,是指从数据库从主数据库复制数据时产生的时间差。它会导致从库中的数据与主库不一致。 二、为什么会主从延时? 1. 主从复制原理 MySQL的...

核心模块-深入探索数据库引擎-MySQL-揭秘 (核心模块英文)

核心模块-深入探索数据库引擎-MySQL-揭秘 (核心模块英文)

简介 Savepoint 是 MySQL 中的一种机制,允许在事务中创建标记点,以便在事务失败时回滚到该标记点。Savepoint 的原理是将事务的当前状态存储在各种数据结构中,包括服务器层、b...

使用-数据库并自动发送备份文件到指定邮箱-K8s-定期备份-MySQL (使用数据库的命令)

使用-数据库并自动发送备份文件到指定邮箱-K8s-定期备份-MySQL (使用数据库的命令)

简介 本文档描述了一个使用脚本来监控服务器高占用率进程并通过电子邮件发送警报的项目。本文还探讨了使用相同机制备份数据库的可能性。 技术 Python psuti...

обеспечение-и-данных-MySQL锁机制-предотвращение-конфликтов-согласованности (翻译)

обеспечение-и-данных-MySQL锁机制-предотвращение-конфликтов-согласованности (翻译)

锁机制是一种通过对数据进行加锁来防止数据冲突和不一致的技术。MySQL 采用了两种类型的锁:共享锁和排他锁,以实现并发访问数据的同时保证数据的一致性。 共享锁 (SharedLock)...