drop,truncate和delete的区别?
区别主要有:
空间占用:当表被truncate后,这个表和索引所占用的空间会恢复到初始大小,delete操作不会减少表或索引所占用的空间。
应用范围:truncate 只能对table;delete可以是table和view。
数据删除:truncate 和delete只删除数据,drop则删除整个表(结构和数据)。
事务处理:delete语句为dml(data maintain language),这个操作会被放到 rollback segment中,事务提交后才生效。如果有相应的 trigger,执行的时候将被触发。truncate是dll(data define language),操作立即生效,原数据不放到 rollback segment中,不能回滚。
速度与记录:在没有备份情况下,谨慎使用 truncate。 delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项。而truncate操作删除数据的速度比delete更快,因为truncate不会逐条删除每一行,而是一次性删除所有数据。
图片来源:网络
相关对象处理:drop 操作会删除整个数据库对象,包括表、视图、存储过程等,而 truncate 和 delete 只删除表中的数据。drop 操作会删除数据库对象相关的所有索引、约束、触发器等对象,而 truncate 和 delete 只会触发相应的约束和触发器。
综上所述,drop、truncate和delete的区别主要表现在空间占用、应用范围、数据删除、事务处理、速度与记录以及相关对象处理等方面。在使用时应根据实际需求和情况选择合适的操作。
在关系型数据库中,"drop"、"truncate"和"delete"是常用的用于删除数据的操作,它们之间有一些区别和注意事项。
1. DROP:DROP语句用于删除数据库中的表、视图、索引等数据库对象。使用DROP语句将完全删除该对象以及与之关联的数据,并且无法恢复。
2. TRUNCATE:TRUNCATE语句用于删除表中的所有数据,但保留表的结构。TRUNCATE语句比DELETE语句执行得更快,因为它不会记录每一行的删除操作,而是直接删除整个表中的数据。TRUNCATE操作也是不可恢复的,一旦执行,数据将被永久删除。
3. DELETE:DELETE语句用于删除表中的一行或多行数据。通过WHERE子句,可以指定要删除哪些行。DELETE语句会记录删除操作,并且可以通过事务回滚操作来恢复被删除的数据。
总结:
- DROP是删除整个数据库对象,包括数据和结构,是最彻底的删除操作。
- TRUNCATE是删除表中所有数据,保留表的结构,执行速度较快,但无法恢复。
- DELETE可以根据条件删除表中的特定行,记录删除操作,并且可以通过事务回滚来恢复被删除的数据。
在使用这些操作之前,请谨慎考虑并备份数据,以避免意外删除或数据丢失。