【发布时间】:2011-02-15 08:06:52
【问题描述】:
谁能提供我在 SQL Server 中截断和删除之间所有差异的列表?
【问题讨论】:
标签: sql-server-2005
谁能提供我在 SQL Server 中截断和删除之间所有差异的列表?
【问题讨论】:
标签: sql-server-2005
你应该在问之前用谷歌搜索它。
截断
截断表 tblName
不能给出条件
删除
Delete FROM tableName
这两种方式都不会对表格产生任何结构。在执行任何操作之前,必须删除所有引用,尽管它不适用于与 Cascade = true for delete 一起使用时的删除
【讨论】:
在处理数据库时,我们在不知道它们之间的区别以及何时使用它们的情况下使用 Delete 和 Truncate。在本文中,我们将讨论Sql中Delete和Truncate的区别。
删除 删除是一个 DML 命令。 删除语句使用行锁执行,表中的每一行都被锁定以进行删除。 我们可以在 where 子句中指定过滤器。 如果 where 条件存在,它将删除指定的数据。 删除活动是一个触发器,因为该操作是单独记录的。 比截断慢,因为它保留日志 截短 截断是一个 DDL 命令。 截断表总是锁定表和页面,但不是每一行。因为它删除了所有数据。 不能使用 Where 条件。 它删除所有数据。 截断表无法激活触发器,因为该操作不记录单个行删除。 在性能方面更快,因为它不保留任何日志。 笔记 与 Transaction 一起使用时,Delete 和 Truncate 都可以回滚。 如果 Transaction 完成,意味着已提交,那么我们无法从日志文件中回滚 Truncate 命令,但我们仍然可以从日志文件中回滚删除命令,因为删除写入将它们记录在日志文件中,以防将来需要从日志文件中回滚。
如果您有一个外键约束引用您要截断的表,即使引用表中没有数据,这也不起作用。这是因为外键检查是使用 DDL 而不是 DML 完成的。这可以通过暂时禁用表的外键约束来解决。
删除表是一个记录操作。因此,每行的删除都会记录在事务日志中,这使得它变慢了。 Truncate table 也会删除表中的所有行,但它不会记录每一行的删除,而是记录表的数据页的释放,这样会更快。
~ 如果不小心使用删除/截断从表中删除了所有数据。您可以回滚已提交的事务。恢复上次备份并运行事务日志,直到删除/截断即将发生。
在Sql中截断命令后查看这篇文章回滚表或
【讨论】:
截断和删除的区别如下:
+----------------------------------------+----------------------------------------------+
| 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) |
+----------------------------------------+----------------------------------------------+
【讨论】: