一、drop
SQL语句
drop table 表名
含义:删除内容和定义,释放空间。简单来说就是把整个表从数据库去掉。如果想再添加数据,只能再新建一个表。
例如:一个班就是一个表,学生就是表中的数据,,学生的职务就是定义。
drop table class 就是把整个班移除,学生和职务都消失。
二、truncate
SQL语句
truncate table 表名
含义:删除内容、释放空间但不删除定义。不删除定义也很容易理解就是保留表的数据结构。与drop不同的是,他只是达到清空表数据的效果而已。如果想再添加数据,可以直接添加。
例如:同样也是一个班,他只去除所有的学生。班还在,职务还在,如果有新增的学生可以进去,也可以分配上职务。
注意:truncate 不能删除行数据,要删就要把表清空
三、delete
SQL语句
delete table 表名
delete table 表名 where 条件
含义:删除内容、不删除定义、不释放空间。虽然是删除整个表的数据,但是其是一行一行地删的,所以会比truncate的效率低。
补充:
1、truncate在功能上与不带where 子句的 delete语句相同:均删除表中的全部行。
2、truncate 比 delete速度快,且使用的系统和事务日志资源少。
3、delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项。所以可以对delete操作进行rollback。
4、truncate 在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令Delete将被撤销,而 truncate 则不会被撤销。
5、truncate 是一个DDL语言,像其他所有的DDL语言一样,他将被隐式提交,不能对 truncate 使用rollback命令。
6、truncate 将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过 truncate 操作后的表比delete操作后的表要快得多。
7、truncate 不能触发任何Delete触发器。
8、当使用truncate将表清空后,表和表的索引将重新设置成初始大小,而delete则不能,delete只能继续按删除前索引大小重新开始。
9、truncate不能清空父表。
两者最大的区別就是delete是写日志文件的,而truncate则不写日志直接刪除,前者可恢复,而后者无法恢复,后者的危险性更高,所以一般不建议使用truncate,常用delete
————————————————
参考:https://blog.csdn.net/qq_45239614/article/details/105478598