TRUNCATE [ TABLE] tbl_ name。

TRUNCATE TABLE完全的清空一个表。这个操作需要DROP权限。
逻辑上讲,TRUNCATE TABLE 和 DELETE语句的删除所有行相似,或者DROP TABLE 和 CREATE TABLE语句相似。为了实现高性能,它越过了DML方法的删除数据,所以他不可以回滚,他不触发ON DELETE触发器,当InnoDB型的表有额外的外键关系时,此语句不能工作。
尽管TRUNCATE TABLE与DELETE语句相同,他被分类为DDL语句而不是DML语句。他与DELETE有以下几点不同在MYSQL5.7:
1.Truncate操作删除并重新创建一个表,所以他要比一个一个的删除行快,特别是很大的表
2.Truncate操作造成一个隐式的提交,所以不可以回滚
3.Truncate操作不能执行如果session持有活动表锁
4.TRUNCATE TABLE会失败对于InnoDB或者NDB表 如果表中有任何外键限制引用此表
5.Truncation操作不返回有意义的删除了多少行的值。通常返回的结果是“0 rowsaffected”,应当被解释为”没有信息”

TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。
DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。

SQL TRUNCATE TABLE与DELETE
逻辑上,TRUNCATE TABLE语句和不带WHERE子句的DELETE语句提供了从表中删除所有数据的相同效果。 但是,它们确实存在一些差别:
使用DELETE语句时,数据库系统会记录操作。 通过一些努力,可以回滚已删除的数据。 但是,当使用TRUNCATE TABLE语句时,除非在尚未提交的事务中使用它,否则无法回滚。
要从外键约束引用的表中删除数据,不能使用TRUNCATE TABLE语句。 在这种情况下,必须使用DELETE语句。
如果表具有与之关联的触发器,则TRUNCATE TABLE语句不会触发delete触发器。
行TRUNCATE TABLE语句后,某些数据库系统会将自动增量列(或标识,序列等)的值重置为其起始值。 DELETE语句不是这种情况。
TRUNCATE [ TABLE] tbl_ name。
TRUNCATE TABLE完全的清空一个表。这个操作需要DROP权限。
逻辑上讲,TRUNCATE TABLE 和 DELETE语句的删除所有行相似,或者DROP TABLE 和 CREATE TABLE语句相似。为了实现高性能,它越过了DML方法的删除数据,所以他不可以回滚,他不触发ON DELETE触发器,当InnoDB型的表有额外的外键关系时,此语句不能工作。
尽管TRUNCATE TABLE与DELETE语句相同,他被分类为DDL语句而不是DML语句。他与DELETE有以下几点不同在MYSQL5.7:
1.Truncate操作删除并重新创建一个表,所以他要比一个一个的删除行快,特别是很大的表
2.Truncate操作造成一个隐式的提交,所以不可以回滚
3.Truncate操作不能执行如果session持有活动表锁
4.TRUNCATE TABLE会失败对于InnoDB或者NDB表 如果表中有任何外键限制引用此表
5.Truncation操作不返回有意义的删除了多少行的值。通常返回的结果是“0 rowsaffected”,应当被解释为”没有信息”
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。
DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。
SQL TRUNCATE TABLE与DELETE
逻辑上,TRUNCATE TABLE语句和不带WHERE子句的DELETE语句提供了从表中删除所有数据的相同效果。 但是,它们确实存在一些差别:
使用DELETE语句时,数据库系统会记录操作。 通过一些努力,可以回滚已删除的数据。 但是,当使用TRUNCATE TABLE语句时,除非在尚未提交的事务中使用它,否则无法回滚。
要从外键约束引用的表中删除数据,不能使用TRUNCATE TABLE语句。 在这种情况下,必须使用DELETE语句。
如果表具有与之关联的触发器,则TRUNCATE TABLE语句不会触发delete触发器。
行TRUNCATE TABLE语句后,某些数据库系统会将自动增量列(或标识,序列等)的值重置为其起始值。 DELETE语句不是这种情况。
带有WHERE子句的DELETE语句从表中删除部分数据,而TRUNCATE TABLE语句始终从表中删除所有数据带有WHERE子句的DELETE语句从表中删除部分数据,而TRUNCATE TABLE语句始终从表中删除所有数据。




