`

TRUNCATE TABLE----delete

    博客分类:
  • sql
阅读更多
删除表中的所有行,而不记录单个行删除操作。TRUNCATE TABLE 在功能上与没有 WHERE 子句的 DELETE 语句相同;但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少。
语法
TRUNCATE TABLE 
    [ { database_name.[ schema_name ]. | schema_name . } ]
    table_name
[ ; ]
参数
database_name 

数据库的名称。

schema_name 

表所属架构的名称。

table_name 

要截断的表的名称,或要删除其全部行的表的名称。

备注

与 DELETE 语句相比,TRUNCATE TABLE 具有以下优点:
  • 所用的事务日志空间较少。

    DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一个项。TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据,并且在事务日志中只记录页释放。 

  • 使用的锁通常较少。

    当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。TRUNCATE TABLE 始终锁定表和页,而不是锁定各行。 

  • 表中将毫无例外地不留下任何页。

    执行 DELETE 语句后,表仍会包含空页。例如,必须至少使用一个排他 (LCK_M_X) 表锁,才能释放堆中的空表。如果执行删除操作时没有使用表锁,表(堆)中将包含许多空页。对于索引,删除操作会留下一些空页,尽管这些页会通过后台清除进程迅速释放。

TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。若要删除表定义及其数据,
请使用 DROP TABLE 语句。 
如果表包含标识列,该列的计数器重置为该列定义的种子值。如果未定义种子,则使用默认值 1。若要保留标识计数器,请使用 DELETE。 
 
限制
不能对以下表使用 TRUNCATE TABLE: 
  • 由 FOREIGN KEY 约束引用的表。

  • 参与索引视图的表。

  • 通过使用事务复制或合并复制发布的表。

对于具有以上一个或多个特征的表,请使用 DELETE 语句。

TRUNCATE TABLE 不能激活触发器,因为该操作不记录各个行删除。

 

权限

所需的最低权限是对 table_name 的 ALTER 权限。TRUNCATE TABLE 权限默认授予表所有者、sysadmin 固定服务器角色的成员、db_owner 和 db_ddladmin 固定数据库角色的成员,并且不可转移权限。但是,可以在诸如存储过程这样的模块中加入 TRUNCATE TABLE 语句,然后为使用 EXECUTE AS 子句的模块授予适当的权限。有关详细信息,请参阅
使用 EXECUTE AS 创建自定义权限集。

 

示例

以下示例删除 JobCandidate 表中的所有数据。SELECT 语句放在 TRUNCATE TABLE 语句之前和之后以比较结果。
USE AdventureWorks;
GO
SELECT COUNT(*) AS BeforeTruncateCount 
FROM HumanResources.JobCandidate;
GO
TRUNCATE TABLE HumanResources.JobCandidate;
GO
SELECT COUNT(*) AS AfterTruncateCount 
FROM HumanResources.JobCandidate;
GO
===============
TRUNCATE和DELETE有以下几点区别 1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。 2、TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。 3、TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE操作后的表要快得多。 4、TRUNCATE不能触发任何DELETE触发器。 5、不能授予任何人清空他人的表的权限。 6、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。 7、不能清空父表。 TRUNCATE TABLE (schema)table_name DROP(REUSE) STORAGE 在默认是 DROP STORAGE 当使用DROP STORAGE时将缩短表和表索引,将表收缩到最小范围,并重新设置NEXT参数。REUSE STORAGE不会缩短表或者调整NEXT参数在特殊情况下使用 REUSE ST

DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
TRUNCATE TABLE 则一次性地从表中删除所有的数据页并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。
分享到:
评论

相关推荐

    oracle中truncate table后的数据恢复

    在Oracle数据库中,`TRUNCATE TABLE`是一个用于删除表中所有数据的命令,它与`DELETE`语句不同,不记录任何删除操作,并且在大多数情况下执行速度更快。然而,一旦执行`TRUNCATE TABLE`,数据通常无法通过常规的...

    TRUNCATE与 DELETE区别

    最后,如果你想完全删除表及其定义,应当使用 DROP TABLE 语句,而不是 TRUNCATE 或 DELETE,因为后者仅删除表中的数据,保留表结构。 综上所述,TRUNCATE TABLE 和 DELETE 在性能、资源消耗和行为特性上都有明显的...

    Truncate Table的用法讲解

    `TRUNCATE TABLE` 是 SQL 语言中一种用于删除表中所有数据的命令,但它与 `DELETE` 语句有着显著的区别。这篇文章将深入讲解 `TRUNCATE TABLE` 的使用方法,以及它与 `DELETE` 的对比,同时涵盖权限、适用场景及注意...

    数据库中truncate,delete,drop语句的比较

    - 可以重用存储空间,即如果执行`TRUNCATE TABLE table_name REUSE STORAGE`,则可以释放未使用的空间并允许再次使用。 2. **`DELETE`**: - **定义**:`DELETE`是一种DML(数据操纵语言)命令,用于删除表中的...

    truncate,delete以及drop区别汇总

    ### truncate, delete 以及 drop 区别汇总 #### 一、概述 在数据库管理中,经常需要对数据表进行各种操作,比如删除表中的数据、删除整个表等。`truncate`, `delete` 和 `drop` 是三种常见的 SQL 命令,它们在功能...

    Oracle给用户授权truncatetable的实现方案

    在Oracle数据库管理中,有时需要为特定用户授权执行`TRUNCATE TABLE`操作,以便他们在自己的职责范围内能够清理数据而不影响其他用户。然而,Oracle不支持直接为用户授予针对单个表的`TRUNCATE`权限,而是通常将更...

    delete,truncate和drop的区别

    - **delete操作**:对于`delete`,可以使用`flashback table`特性来恢复已删除的数据,前提是已提交的`delete`操作产生了有效的undo记录。 #### 六、总结 在选择使用`delete`、`truncate`还是`drop`时,需要考虑多...

    MySQL中truncate误操作后的数据恢复案例

    实际线上的场景比较复杂,当时涉及了truncate, delete 两个操作,经确认丢数据差不多7万多行,等停下来时,差不多又有共计1万多行数据写入。 这里为了简单说明,只拿弄一个简单的业务场景举例。 测试环境: Percona-...

    delete from 表名与truncate table 表名区别

    本文将详细讨论两种常见的删除方式:`DELETE FROM` 和 `TRUNCATE TABLE`,并分析它们各自的特点和适用场景,以便于选择最适合的数据清理方法。 1. 自动编号列的影响 当涉及带有自动编号(如 AUTO_INCREMENT 或 ...

    TRUNCATE 快速删除表中的所有数据

    与 `DELETE` 语句相比,`TRUNCATE TABLE` 在处理大量数据时具有显著的优势,尤其是在速度和资源消耗方面。 首先,`TRUNCATE TABLE` 的主要作用是删除表中的所有行,但它并不像 `DELETE` 那样逐行删除并记录每个删除...

    PostgreSQL TRUNCATE TABLE

    与 `DELETE` 语句不同,`TRUNCATE TABLE` 不会逐行删除数据,而是直接移除整个表的数据段,因此在处理大量数据时,它的执行速度更快且更高效。 当你需要清空一张表,而又不想破坏表的定义或索引等元数据时,`...

    sql之truncate、delete与drop区别

    在SQL语言中,`TRUNCATE`、`DELETE` 和 `DROP` 是三个非常重要的数据操作语句,它们各自有着不同的用途和特性。理解这些差异对于数据库管理至关重要,特别是对于数据安全性和性能优化方面。 首先,`TRUNCATE` 语句...

    oracle数据库删除数据Delete语句和Truncate语句的对比.docx

    Oracle 数据库删除数据 Delete 语句和 Truncate 语句的对比 Delete 语句和 Truncate 语句是 Oracle 数据库中两种常用的删除数据的方法,但是它们之间存在着明显的差异。 一、Delete 语句 Delete 语句是一种 DML...

    SQLite Truncate Table

    在 SQLite 数据库中,虽然没有直接的 `TRUNCATE TABLE` 命令来清空一个表的所有数据,但是可以通过组合使用 `DELETE` 和 `VACUUM` 命令来达到相同的效果。这里我们将深入探讨如何在 SQLite 中实现类似 `TRUNCATE ...

    oracle数据库删除数据Delete语句和Truncate语句的对比.pdf

    在Oracle数据库管理中,删除数据是一项常见的操作,通常有两种主要的方式:Delete语句和Truncate语句。这两种语句在功能上相似,都是用来移除表中的数据,但在执行效率和资源消耗上存在显著差异。 一、Delete语句 ...

    mysql 删除操作(delete+TRUNCATE)

    MySQL中的删除操作主要涉及到两种方式:DELETE和TRUNCATE,它们在不同的场景下有不同的优势和用途。下面将详细解析这两种方法以及它们的使用细节。 1. DELETE语句: DELETE语句是最常用的删除数据的方式,它允许...

    ZenCart常用SQL命令

    与使用`DELETE FROM`语句相比,`TRUNCATE TABLE`在执行效率上更高,因为它不涉及记录删除日志的操作,而是直接释放已分配的空间。 #### 四、总结 通过上述介绍可以看出,在ZenCart的二次开发过程中,合理使用SQL...

Global site tag (gtag.js) - Google Analytics