W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
TRUNCATE — 清空一個表或者一組表
TRUNCATE [ TABLE ] [ ONLY ] name
[ * ] [, ... ]
[ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]
TRUNCATE
可以從一組表中快速地移除所有行。 它具有和在每個表上執(zhí)行無條件DELETE
相同的 效果,不過它會更快,因為它沒有實際掃描表。此外,它會立刻回收磁盤空間, 而不是要求一個后續(xù)的VACUUM
操作。在大表上 它最有用。
name
要截斷的表的名字(可以是模式限定的)。如果在表名前指定了 ONLY
,則只會截斷該表。如果沒有指定ONLY
, 該表及其所有后代表(如果有)都會被截斷??蛇x地,可以在表名后指定 *
來顯式地包括后代表。
RESTART IDENTITY
自動重新開始被截斷表的列所擁有的序列。
CONTINUE IDENTITY
不更改序列值。這是默認(rèn)值。
CASCADE
自動截斷所有對任一所提及表有外鍵引用的表以及任何由于 CASCADE
被加入到組中的表。
RESTRICT
如果任一表上具有來自命令中沒有列出的表的外鍵引用,則拒絕截斷。這是默認(rèn)值。
要截斷一個表,你必須具有其上的TRUNCATE
特權(quán)。
TRUNCATE
在要操作的表上要求一個 ACCESS EXCLUSIVE
鎖,這會阻塞所有其他在該表上的 并發(fā)操作。當(dāng)指定RESTART IDENTITY
時,任何需要被 重新開始的序列也會被排他地鎖住。如果要求表上的并發(fā)訪問,那么 應(yīng)該使用DELETE
命令。
TRUNCATE
不能被用在被其他表外鍵引用的表上, 除非那些表也在同一個命令中被階段。這些情況中的可行性檢查將會 要求表掃描,并且重點不是為了做掃描。CASCADE
選項可以被用來自動地包括所有依賴表 — 但使用它時要非常 小心,否則你可能丟失數(shù)據(jù)! 特別注意的是,當(dāng)要被截斷的表是一個分區(qū)時,兄弟節(jié)點分區(qū)不會受到影響,但是所有的引用表都發(fā)生級聯(lián),他們的分區(qū)也沒有區(qū)別。
TRUNCATE
將不會引發(fā)表上可能存在的任何 ON DELETE
觸發(fā)器。但是它將會引發(fā) ON TRUNCATE
觸發(fā)器。如果在這些表的任意一個 上定義了ON TRUNCATE
觸發(fā)器,那么所有的 BEFORE TRUNCATE
觸發(fā)器將在任何截斷發(fā)生之前
被引發(fā),而所有AFTER TRUNCATE
觸發(fā)器將在最后 一次截斷完成并且所有序列被重置之后引發(fā)。觸發(fā)器將以表被處理的順 序被引發(fā)(首先是那些被列在命令中的,然后是由于級聯(lián)被加入的)。
TRUNCATE
不是 MVCC 安全的。截斷之后, 如果并發(fā)事務(wù)使用的是一個在截斷發(fā)生前取得的快照, 表將對這些并發(fā)事務(wù)呈現(xiàn)為空。詳見第 13.5 節(jié)。
從表中數(shù)據(jù)的角度來說,TRUNCATE
是事務(wù)安全的: 如果所在的事務(wù)沒有提交,階段將會被安全地回滾。
在指定了RESTART IDENTITY
時,隱含的 ALTER SEQUENCE RESTART
操作也會被事務(wù)性地完成。 也就是說,如果所在事務(wù)沒有提交,它們也將被回滾。注意如果 事務(wù)回滾前在被重啟序列上還做了額外的序列操作,這些操作在序列上的效果 也將被回滾,但是它們在currval()
上的效果不會被回滾。也就 是說,在事務(wù)之后,
currval()
將繼續(xù)反映在失敗事務(wù)內(nèi)得到的 最后一個序列值,即使序列本身可能已經(jīng)不再與此一致。這和失敗事務(wù)之后 currval()
的通常行為類似。
TRUNCATE
當(dāng)前不支持外部表。 這表示如果一個指定的表具有任何外部的后代表,這個命令將會失敗。
截斷表bigtable
和 fattable
:
TRUNCATE bigtable, fattable;
做同樣的事情,并且還重置任何相關(guān)聯(lián)的序列發(fā)生器:
TRUNCATE bigtable, fattable RESTART IDENTITY;
截斷表othertable
,并且級聯(lián)地截斷任何通過 外鍵約束引用othertable
的表:
TRUNCATE othertable CASCADE;
SQL:2008 標(biāo)準(zhǔn)包括了一個TRUNCATE
命令, 語法是TRUNCATE TABLE
。子句 tablename
CONTINUE IDENTITY
/RESTART IDENTITY
也出現(xiàn)在了該標(biāo)準(zhǔn)中,但是含義有些不同。這個命令的一些并發(fā)行為被標(biāo)準(zhǔn) 留給實現(xiàn)來定義,因此如果必要應(yīng)該考慮上述注解并且與其他實現(xiàn)進(jìn)行比較。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: