暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

TRUNCATE Table

原创 wzf0072 2023-10-10
1617

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语句始终从表中删除所有数据。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论