Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL drop truncate delete

浅谈MySQL中drop、truncate和delete的区别

作者:geocodingcoder

在MySQL中,drop、delete和truncate是用来删除表中数据或整个表的命令,本文主要介绍了MySQL中drop、truncate和delete的区别,具有一定的参考价值,感兴趣的可以了解一下

1.前言

对于drop、truncate和delete,虽然简单,但是真要使用或者面试时候问到还是需要有一定的总结,今天来简单讲讲他们直接的区别。在此之前先简单了解下什么是DDL和DML。
DDL(数据定义语言,Data Definition Language):DDL代表数据定义语言,是一种有助于创建数据库模式的SQL命令。DDL中常用的命令有:createdropaltertruncaterename等等。
DML(数据操作语言,Data Manipulation Language):DML代表数据操作语言,是一种有助于检索和管理关系数据库中数据的SQL命令。DML中常用的命令有:insertupdatedeleteselect等等。

2.drop

DROP命令用于删除整个表(结构和数据),或数据库等对象,特点如下:

代码示例:

DROP TABLE employees;

注意:DROP语句执行后立即生效,无法找回。

3.truncate

TRUNCATE命令用于删除表中的所有行,其特点如下:

truncate会删除表中所有记录,并且将重新设置高水线和所有的索引。

就是truncate会删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子),缺省情况下将空间释放到minextents的extent(就是表结构中的段内的区域),除非使用reuse storage(使用这句话,所在的extent空间不会被回收,只是将数据删除掉,数据删除之后的freespace空间,只能供本表使用,其他的不可以使用)。不会记录日志,所以执行速度很快,但不能通过rollback撤消操作(如果一不小心把一个表truncate掉,也是可以恢复的,只是不能通过rollback来恢复

示例:

TRUNCATE TABLE employees;

注意:TRUNCATE语句执行后立即生效,无法找回。

4.delete

DELETE命令用于删除表中的一行或多行记录,具有如下特点:

选择性删除:可以通过WHERE子句指定删除哪些行。若不指定WHERE子句,则删除表中的所有行。

事务性操作DELETE操作是事务安全的,这意味着你可以在一个事务中回滚DELETE操作。这在你意外删除了错误数据时非常有用。

触发器:如果表上有触发器,执行DELETE操作会触发它们。

性能:因为DELETE操作逐行删除数据,并记录日志,所以在删除大量数据时可能会比较慢。

示例:

DELETE FROM employees WHERE department = 'Sales';

5.总结

在速度上,一般来说,drop> truncate > delete

 到此这篇关于浅谈MySQL中drop、truncate和delete的区别的文章就介绍到这了,更多相关MySQL drop truncate delete内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文