TRUNCATE TABLE

轉載:http://www.cnblogs.com/Jasper-Wang/archive/2006/07/11/448360.html

 

TRUNCATE TABLE  刪除表中的所有行,而不記錄單個行刪除操作。

語法  TRUNCATE TABLE name

參數  name  是要截斷的表的名稱或要刪除其全部行的表的名稱。

註釋
TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日誌資源少。

DELETE 語句每次刪除一行,並在事務日誌中爲所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,並且只在事務日誌中記錄頁的釋放。

TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置爲該列的種子。
如果想保留標識計數值,請改用 DELETE。
如果要刪除表定義及其數據,請使用 DROP TABLE 語句。

對於由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應使用不帶 WHERE 子句的 DELETE 語句。由於 TRUNCATE TABLE 不記錄在日誌中,所以它不能激活觸發器。

TRUNCATE TABLE 不能用於參與了索引視圖的表。

示例  下例刪除 authors 表中的所有數據。

TRUNCATE TABLE authors

權限
TRUNCATE TABLE 權限默認授予表所有者、sysadmin 固定服務器角色成員、db_owner 和 db_ddladmin 固定數據庫角色成員且不可轉讓。

根據下面的語句,可以測試truncate table與delete語句的區別。(對於自增字段key的變化)

CREATE TABLE [tab1] (
 [key] [int] IDENTITY (1, 1) NOT NULL ,
 [aID] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
 [bID] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
 CONSTRAINT [PK_tab1] PRIMARY KEY  CLUSTERED
 (
  [key]
 )  ON [PRIMARY]
) ON [PRIMARY]
GO

insert  tab1  values('as1','19') 
insert  tab1  values('as2','19') 
insert  tab1  values('as3','38') 
insert  tab1  values('as4','45') 

select * from tab1

truncate table tab1

delete from tab1

反覆使用刪除和插入語句,觀察關鍵字的變化

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章