SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE 的区别。

DROP:

DROP TABLE test;

删除表test,并释放空间,将test删除的一干二净。

TRUNCATE:

TRUNCATE test;

删除表test里的内容,并释放空间,但不删除表的定义,表的结构还在。

DELETE:

1、删除指定数据

删除表test中年龄等于30的且国家为US的数据

DELETE FROM test WHERE age=30 AND country=‘US‘;

2、删除整个表

仅删除表test内的所有内容,保留表的定义,不释放空间。

DELETE FROM test 或者 TRUNCATE test;

truncate table 命令将快速删除数据表中的所有记录,但保留数据表结构。这种快速删除与 delete from 数据表的删除全部数据表记录不一样,delete 命令删除的数据将存储在系统回滚段中,需要的时候,数据可以回滚恢复,而truncate 命令删除的数据是不可以恢复的。

相同点

truncate 和不带 where 子句的 delete, 以及 drop 都会删除表内的数据。

不同点:

1. truncate 和 delete 只删除数据不删除表的结构(定义) ,drop 语句将删除表的结构被依赖的约束(constrain), 触发器(trigger), 索引(index); 依赖于该表的存储过程/函数将保留, 但是变为 invalid 状态。

2.delete 语句是 dml, 这个操作会放到 rollback segement 中, 事务提交之后才生效; 如果有相应的 trigger, 执行的时候将被触发。 truncate, drop 是 ddl, 操作立即生效, 原数据不放到 rollback segment 中, 不能回滚。 操作不触发 trigger。

3.delete 语句不影响表所占用的 extent, 高水线(high watermark)保持原位置不动。 显然 drop 语句将表所占用的空间全部释放 。 truncate 语句缺省情况下见空间释放到 minextents 个 extent, 除非使用 reuse storage; truncate会将高水线复位(回到最开始)。

4.速度:一般来说: drop > truncate > delete 。

5.安全性: 小心使用 drop 和 truncate, 尤其没有备份的时候。否则哭都来不及。

使用上, 想删除部分数据行用 delete, 注意带上 where 子句。 回滚段要足够大。

想删除表, 当然用 drop。

想保留表而将所有数据删除。如果和事务无关, 用 truncate 即可。 如果和事务有关, 或者想触发 trigger, 还是用 delete。

如果是整理表内部的碎片, 可以用 truncate 跟上 reuse stroage, 再重新导入/插入数据。

 

原文地址:https://www.cnblogs.com/mlfan-java/p/10162862.html

时间: 2024-10-09 08:27:06

SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE 的区别。的相关文章

如何区别数据库删除语句drop与delete与truncate?

1.delete:删除数据表中的行(可以删除某一行,也可以在不删除数据表的情况下删除所有行) 删除某一行:delete from 数据表名称 where 列名称=值: 删除所有行:delete*from 数据表名称 2.drop:删除数据表或数据库或数据表字段 删除数据库:drop database 数据库名称 删除数据表(表的结构.属性.索引也会被删除):use 数据库名称 drop table 数据表1名称,数据表2名称 删除数据表字段(列):use 数据库名称 alter table 数据

数据库中删除语句Drop、Delete、Truncate的相同点和不同点的比较

数据库中删除语句Drop.Delete.Truncate的相同点和不同点的比较(举例说明) 数据库删除语句的分别介绍:Delete:用于删除表中的行(注:可以删除某一行:也可以在不删除表的情况下(即意味着表的结构.属性.索引完整)删除所有行)                语法:删除某一行:Delete From 表名称  Where 列名称=值              删除所有行: Delete From 表名称       或     Delete *  From  表名称   Drop:

数据中删除语句 Drop、Delete、Truncate的相同点和不同点

数据库中删除语句Drop.Delete.Truncate的相同点和不同点的比较(举例说明) 数据库删除语句的分别介绍: Delete:用于删除表中的行(注:可以删除某一行:也可以在不删除表的情况下(即意味着表的结构.属性.索引完整)删除所有行) 语法:删除某一行:Delete From 表名称  Where 列名称=值 删除所有行: Delete From 表名称       或     Delete *  From  表名称 Drop:用于删除表(注:将表的结构.属性.索引也会被删除.) 语法

在dataguard备库上找回在主库上被错误的Drop/Truncate/Delete 掉的Table

前提: - Standby Database Must be in Flashback database mode. - Time at which Drop/Truncate/Delete Table happened should be within the db_flashback_retention_target and all the flashback and archive logs should be available     在dataguard备库上找回在主库上被错误的Dr

MySQL笔记-turncat、drop、delete的区别

TRUNCATE 语法: TRUNCATE TABLE [schema.] table [{DROP | REUSE} STORAGE]功能: 删除整个表的数据并释放空间 描述: 由于Truncate 是DDL 命令,所以执行过程中原数据不放在Rollback Segment 中,不产生回滚数据 ,不产生Redo Log . Truncate , Drop 等DDL命令都是隐含提交的. 需要drop的操作权限 相当于这样的流程:先drop table 然后 create table. 不记录日志

delete trancate drop三者之间的区别

简而言之: 删除效果及速度:Drop > truncate > delete 原因: delete,逐行删除,且用日志逐行记录用于回滚,会执行删除触发器:       ------>   只删除记录,不会释放记录和表占的空间. truncate逐行删除,在日志中逐行记录,无法回滚.不执行删除触发器   ------>   删除记录,会释放空间到默认大小. drop释放存储表数据所用的数据页来删除数据,只在日志中记录页的释放   ------>   释放所有空间. 原文地址:h

sql语句中---删除表结构drop,truncate和delete的异同点

参考别人总结,此内容仅供自己学习 一.sql中的语法 1.drop table 表名称                                      eg:drop table dbo.Sys_Test 2.truncate table 表名称                                eg:truncate table dbo.Sys_Test 3.delete from 表名称 where  列名称=值       eg:delete from dbo.Sys

sql 删除表格delete drop truncate 区别(转)

(1)   DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作.TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的.并且在删除的过程中不会激活与表有关的删除触发器.执行速度 快. (2)   表和索引所占空间.当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,而DELETE操作不会减少表或索引所占用的空间.drop语句将表所占用的空间全释放掉

数据库三种删除方法: delete drop truncate

Delete Delete :删除数据表中的行(可以删除某一行,也可以在不删除数据表的情况下删除所有行). 删除某一行:Delete from 数据表名称 where 列名称=值: 删除所有行:Delete * from 数据表名称 Drop Drop :删除数据表或数据库,或删除数据表字段. 删除数据库:drop database 数据库名称 删除数据表:(表的结构.属性.索引也会被删除) use 数据库名称 drop table 数据表1名称,数据表2名称 删除数据表字段(列): use 数