首页技术delete语句和truncate语句的区别,distinct语句

delete语句和truncate语句的区别,distinct语句

编程之家2026-07-021158次浏览

大家好,关于delete语句和truncate语句的区别很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于distinct语句的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

delete语句和truncate语句的区别,distinct语句

truncate语句和delete有什么区别

1、在功能上,truncate是清空一个表的内容,它相当于delete from table_name。

2、delete是dml操作,truncate是ddl操作;因此,用delete删除整个表的数据时,会产生大量的roolback,占用很多的rollback segments,而truncate不会。

3、在内存中,用delete删除数据,表空间中其被删除数据的表占用的空间还在,便于以后的使用,另外它是“假相”的删除,相当于windows中用delete删除数据是把数据放到回收站中,还可以恢复,当然如果这个时候重新启动系统(OS或者RDBMS),它也就不能恢复了!

而用truncate清除数据,内存中表空间中其被删除数据的表占用的空间会被立即释放,相当于windows中用shift+delete删除数据,不能够恢复!

4、truncate调整high water mark而delete不;truncate之后,TABLE的HWM退回到 INITIAL和NEXT的位置(默认)delete则不可以。

5、truncate只能对TABLE,delete可以是table,view,synonym。

delete语句和truncate语句的区别,distinct语句

6、TRUNCATE TABLE的对象必须是本模式下的,或者有drop any table的权限而 DELETE则是对象必须是本模式下的,或被授予 DELETE ON SCHEMA.TABLE或DELETE ANY TABLE的权限。

7、在外层中,truncate或者delete后,其占用的空间都将释放。

8、truncate和delete只删除数据,而drop则删除整个表(结构和数据)。

扩展资料

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的适应高吞吐量的数据库解决方案。

参考资料:百度百科-Oracle数据库

delete语句和truncate语句的区别,distinct语句

MySQL DELETE语句和TRUNCATE TABLE语句的区别

DELETE语句和TRUNCATE语句,都是删除数据表中的数据,但是它们对数据库的影响是很不一样的。一般来讲DELETE用于日常数据表的删除操作,TRUNCATE则用于对数据库整体性的维护性操作。如果您不是数据库管理员,特别是对TRUNCATE语句的影响不太了解的情况下,请不要使用TRUNCATE语句。下面TRUNCATE语句说明取自MySql用户手册,供参考。

TRUNCATE语法

TRUNCATE [TABLE] tbl_name

TRUNCATE TABLE用于完全清空一个表。从逻辑上说,该语句与用于删除所有行的DELETE语句等同,但是在有些情况下,两者在使用上有所不同。

对于InnoDB表,如果有需要引用表的外键限制,则TRUNCATE TABLE被映射到DELETE上;否则使用快速删减(取消和重新创建表)。使用TRUNCATE TABLE重新设置AUTO_INCREMENT计数器,设置时不考虑是否有外键限制。

对于其它存储引擎,在MySQL 5.1中,TRUNCATE TABLE与DELETE FROM有以下几处不同:

·删减操作会取消并重新创建表,这比一行一行的删除行要快很多。

·删减操作不能保证对事务是安全的;在进行事务处理和表锁定的过程中尝试进行删减,会发生错误。

·被删除的行的数目没有被返回。

·只要表定义文件tbl_name.frm是合法的,则可以使用TRUNCATE TABLE把表重新创建为一个空表,即使数据或索引文件已经被破坏。

·表管理程序不记得最后被使用的AUTO_INCREMENT值,但是会从头开始计数。即使对于MyISAM和InnoDB也是如此。MyISAM和InnoDB通常不再次使用序列值。

·当被用于带分区的表时,TRUNCATE TABLE会保留分区;即,数据和索引文件被取消并重新创建,同时分区定义(.par)文件不受影响。

TRUNCATE TABLE是在MySQL中采用的一个Oracle SQL扩展。

SQL中truncate table和delete的区别

SQL中truncate table和delete的区别

TRUNCATE TABLE在功能上与不带 Where子句的 Delete语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE比 Delete速度快,且使用的系统和事务日志资源少。

Delete语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

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

对于由 FOREIGN KEY约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 Where子句的 Delete语句。由于 TRUNCATE TABLE不记录在日志中,所以它不能激活触发器。

TRUNCATE TABLE不能用于参与了索引视图的表。

truncate,delete,drop的异同点:

注意:这里说的delete是指不带where子句的delete语句

相同点: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 w2atermark)保持原位置不动

显然drop语句将表所占用的空间全部释放

truncate语句缺省情况下将空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始).

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

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

使用上:

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

想删除表,当然用drop

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

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

关于delete语句和truncate语句的区别到此分享完毕,希望能帮助到您。

excel截取字符串后几位 excel中取一串字符的后几位个人网页设计素材(免费个人网页素材)