Delete、Truncate Table 与 Drop Table 的差异(转贴)

Delete、Truncate Table 与 Drop Table 的差异(转贴)


转贴:http://byron0920.pixnet.net/blog/post/85759990-%E5%88%AA%E9%99%A4%E6%95%B4%E5%80%8B%E8%B3%87%E6%96%99%E8%A1%A8%EF%BC%8C%E4%BD%BF%E7%94%A8delete%E3%80%81truncate-table%E8%88%87drop

许多情况下,我们需要删除整个数据表内的数据,重新输入新数据,有三种方法可以参考使用,分别是使用Delete、Trancate与Drop,那使这三种方式的差异为何呢?

一、使用Delete :

使用Delete语法,不加任何Where条件下,是可以移除整个Table的数据,这个方式简单易懂,但是却会耗用大量资源,因为Delete语法:

1.Delete属DML命令,不加任何Where条件下,会一笔一笔的移除数据列,且在事务记录中每笔删除的数据,都会记录成一个项目,当整个Table的数据移除完时,已耗用许多时间。

2.若Table存在删除的触发进程(Trigger)时,将会引发触发进程

3.如果该Table包含识别字段,使用Delete陈述式删除数据表中所有数据时,并不会让识别编号重置,所以后续再新增的数据,仍会从之前最后一个编号之后继续编号下去

二、使用Truncate :

使用Truncate Table 会移除数据表中的所有数据列,但会保留数据表结构及其字段、条件约束、索引等。

如果该Table包含识别字段,这个识别编号会重设为原本定义的初始值。如果未定义任何初始值,就会使用默认值 1。

Trance Table 与Delete 比较的优点为:

1.使用的事务记录空间较少:Truncate Table会取消配置用来保存数据表数据的数据页,以移除数据,所以事务记录只会记录页面的取消配置。

2.通常会使用较少锁定:Delete会锁定每一笔数据,以便执行删除,但Truncate Table只锁定数据表和页面,不会锁定每个数据列。

3.速度较快:综合以上两点,Truncate Table会比Delete快!

Truncate Table 语法范例:

TRUNCATE TABLE MyTestTable

三、使用Drop Table:

使用Drop Tablec会移除一或多个数据表定义及这些数据表的所有数据、索引、触发进程、条件约束和权限规格,也就是完全删除一个数据表。

当卸除数据表时,数据表的规则或默认值会失去它们的系结,数据表的任何相关条件约束或触发进程也都会自动卸除。如果重新建立数据表,您必须重新系结适当的规则和默认值、重新建立任何触发进程,以及加入所有必要的条件约束。

所以使用Drop Table后,若你要重新使用被删除的数据表,就只好重新Create Table了,但是要注意,Drop Table 和 Create Table 不得在相同批次的相同数据表上执行。否则,系统可能会发生非预期的错误。

Drop Table 语法范例:

DROP TABLE MyTestTable