百科狗-知识改变命运!
--

mysql中delete和drop的区别

百变鹏仔1年前 (2023-12-05)阅读数 6#综合百科
文章标签数据语句

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,再重新导入/插入数据/

truncate和delete区别是什么,该如何使用?

..网上不是有很多吗,,,

给你转个,

转:

1. truncate和 delete只删除数据不删除表的结构(定义)

drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的

存储过程/函数将保留,但是变为invalid状态.

2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,

执行的时候将被触发.

truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发

mysql中delete和drop的区别

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,再重新导入/插入数据/

1、表和索引所占空间。当表被truncate?后,这个表和索引所占用的空间会恢复到初始大小,delete操作不会减少表或索引所占用的空间。

2、应用范围。truncate?只能对table;delete可以是table和view。

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

4、delete语句为dml(data?maintain?language),这个操作会被放到?rollback?segment中,事务提交后才生效。如果有相应的?tigger,执行的时候将被触发。truncate是dll(data?define?language),操作立即生效,原数据不放到?rollback?segment中,不能回滚。

5、在没有备份情况下,谨慎使用?truncate。要删除部分数据行采用delete且注意结合where来约束影响范围。回滚段要足够大。若想保留表而将表中数据删除,如果于事务无关,用truncate即可实现。如果和事务有关,或老是想触发trigger,还是用delete。

6、truncate?table?表名?速度快,而且效率高,因为:?

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

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

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

8、总结:

在使用truncate时一定要注意,虽然可以恢复,但为了减少麻烦,还是要慎重。

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

如果想保留表而将所有数据删除,如果和事务无关,用truncate即可;

如果和事务有关,或者想触发trigger,还是用delete;

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

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)