任何人都可以提供SQL服务器中截断和删除之间所有差异的列表吗?
答案 0 :(得分:17)
你应该在询问前谷歌。
<强>截断强>
截断表tblName
不能给出任何条件
删除强>
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或
中截断命令后检查此文章回滚表