sql server中截断和删除有什么区别?

时间:2010-05-04 06:39:42

标签: sql-server-2005

任何人都可以提供SQL服务器中截断和删除之间所有差异的列表吗?

3 个答案:

答案 0 :(得分:17)

你应该在询问前谷歌。

<强>截断

  1. Truncate删除所有引用 来自数据库。
  2. 快速
  3. 交易日志中没有条目。
  4. 如果删除一次,则无法恢复。
  5. 页面引用被清除。
  6. 全部或全部
  7. 标识列重新初始化 种子
  8. 截断是DDL
  9.   

    截断表tblName

    不能给出任何条件

    删除

    1. 条目在交易日志中生成。
    2. 可恢复
    3. 基于记录的删除
    4. 参考文献在第
    5. 页中提到
    6. 身份从之前开始 位置
    7. DML
    8. Delete FROM tableName
      

      这两个效果都不会影响表格的任何结构。在执行任何操作之前,必须删除所有引用,但在使用Cascade = true进行删除时不适用于删除

答案 1 :(得分:0)

截断和删除之间的区别如下:

+----------------------------------------+----------------------------------------------+
|                Truncate                |                    Delete                    |
+----------------------------------------+----------------------------------------------+
| We can't Rollback after performing     | We can Rollback after delete.                |
| Truncate.                              |                                              |
|                                        |                                              |
| Example:                               | Example:                                     |
| BEGIN TRAN                             | BEGIN TRAN                                   |
| TRUNCATE TABLE tranTest                | DELETE FROM tranTest                         |
| SELECT * FROM tranTest                 | SELECT * FROM tranTest                       |
| ROLLBACK                               | ROLLBACK                                     |
| SELECT * FROM tranTest                 | SELECT * FROM tranTest                       |
+----------------------------------------+----------------------------------------------+
| Truncate reset identity of table.      | Truncate reset identity of table.            |
+----------------------------------------+----------------------------------------------+
| It locks the entire table.             | It locks the table row.                      |
+----------------------------------------+----------------------------------------------+
| Its DDL(Data Definition Language)      | Its DML(Data Manipulation Language)          |
| command.                               | command.                                     |
+----------------------------------------+----------------------------------------------+
| We can't use WHERE clause with it.     | We can use WHERE to filter data to delete.   |
+----------------------------------------+----------------------------------------------+
| Trigger is not fired while truncate.   | Trigger is fired.                            |
+----------------------------------------+----------------------------------------------+
| Syntax :                               | Syntax :                                     |
| 1) TRUNCATE TABLE table_name           | 1) DELETE FROM table_name                    |
|                                        | 2) DELETE FROM table_name WHERE              |
|                                        |    example_column_id IN (1,2,3)              |
+----------------------------------------+----------------------------------------------+

答案 2 :(得分:0)

在处理数据库时,我们使用Delete和Truncate而不知道它们之间的区别以及何时使用它们。在本文中,我们将讨论Sql中Delete和Truncate之间的区别。

删除 删除是DML命令。 使用行锁执行Delete语句,表中的每一行都被锁定以进行删除。 我们可以在where子句中指定过滤器。 如果条件存在,它将删除指定的数据。 将活动删除为触发器,因为操作是单独记录的。 比Truncate慢,因为它保留了日志 截短 Truncate是一个DDL命令。 截断表总是锁定表和页,但不是每行。因为它删除了所有数据。 不能使用Where条件。 它删除所有数据。 截断表无法激活触发器,因为该操作不会记录单个行删除。 性能更快,因为它不保留任何日志。 注意 当与Transaction一起使用时,可以回滚Delete和Truncate。 如果Transaction已完成,则表示我们无法从日志文件回滚Truncate命令,但我们仍然可以从日志文件回滚删除命令,因为删除写入将它们记录在日志文件中,以防将来需要从日志文件回滚。

如果您有一个外键约束引用您尝试截断的表,即使引用表中没有数据,这也不起作用。这是因为外键检查是使用DDL而不是DML完成的。这可以通过暂时禁用表的外键约束来解决。

删除表是记录的操作。因此,每行的删除都会记录在事务日志中,这会使其变慢。 截断表还删除表中的所有行,但它不记录每行的删除,而是记录表的数据页的重新分配,这使得它更快。

〜如果意外地使用Delete / Truncate从表中删除了所有数据。您可以回滚已提交的事务。恢复上次备份并运行事务日志,直到删除/截断即将发生。

在Sql或

中截断命令后检查此文章回滚表

difference-between-delete-truncate-in

另见when-to-use-truncate-and-delete-command