Truncate是一种SQL语法,可以快速清除表中的所有数据。本文介绍了Truncate的用法和注意事项,并与drop和delete方法进行了比较。有需要的朋友可以收藏一下,方便下次浏览观看。
前言:
当我们想清空一个表时,我们经常使用truncate语句。很多时候我们只关心能不能达到要求,而不去思考这类语句的使用场景和注意事项。本文主要介绍truncate语句的用法和注意事项。
1.truncate使用语法
Truncate用于清空或截断表,并且只能在表上使用。truncate的语法很简单,直接跟表名就行了,比如:truncate table tbl_name或者truncate tbl_name。
Truncate语句需要表的drop权限。从逻辑上讲,truncate table类似于delete语句删除所有行或drop table语句然后create table语句的组合。为了获得高性能,它绕过了删除数据的DML方法,因此不能回滚。虽然truncate table类似于delete,但它被归类为DDL语句,而不是DML语句。
2.truncate与drop,delete的对比
上面已经说了truncate和delete、drop很像,但其实这三者差别很大。下面简单对比一下三者的异同。
Truncate和drop是DDL语句,在执行后不能回滚;是delete DML语句,可以回滚。
Truncate只能对表起作用;Delete、drop可用于表、视图等。
Truncate将清空表中的所有行,但表结构、其约束、索引等除外。将保持不变;Drop将删除表的结构及其相关约束、索引等。
Truncate将重置表的自增量;删除不会。
Truncate不会激活与该表相关的删除触发器;删除就可以了。
Truncate会将表和索引占用的空间恢复到原始大小;删除操作不会减少表或索引占用的空间,而drop语句将释放表占用的所有空间。
3.truncate使用场景及注意事项
通过前面的介绍,我们可以很容易的得到truncate语句的使用场景,也就是在表格数据完全不需要的情况下可以使用truncate。如果要用delete删除一些数据,注意where子句;如果要删除一个表,当然使用drop;如果希望保留表并删除所有数据,并且与事务无关,请使用truncate。如果和事务有关,或者你想触发一个触发器,还是用delete;如果是整理表内的碎片,可以使用truncate,然后重新插入数据。
反正truncate table是一个高风险的操作,尤其是在生产环境中。以下是一些注意事项,希望大家在使用时可以做参考。
Truncate无法通过binlog回滚。
Truncate将清除所有数据并快速执行。
不能对具有外键约束引用的表使用Truncate。
Truncate需要drop权限,因此不建议授予帐户drop权限。
在执行truncate之前,一定要反复检查和确认。最好提前备份下表中的数据。
以上是边肖介绍的MySQL中Truncate用法的详细解释。希望对你有帮助。非常感谢您对我们网站的支持!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。