?
Dieses Dokument verwendet PHP-Handbuch für chinesische Websites Freigeben
TRUNCATE [ TABLE ] [ ONLY ] name [, ... ] [ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]
TRUNCATE快速地從一堆表中刪除所有行。它和在每個 表上進(jìn)行無條件的DELETE有同樣的效果,不過因為它 不做表掃描,因而快得多。在大表上最有用。
要清空的表名字(可以有模式修飾)。如果聲明ONLY,只有 那個表會被清空。如果沒有聲明ONLY,這個表以及其所有子 表(若有)會被清空。
Warning |
自動重啟被清空的列的序列。 |
Warning |
不要改變序列的缺省值。此為缺省。 |
級聯(lián)清空所有在該表上有外鍵引用的表,或者由于CASCADE 而被添加到組中的表。
如果其他表在該表上有外鍵引用則拒絕清空。此為缺省。
你必須對表有TRUNCATE以清空它。
TRUNCATE取得了一個其操作的每個表上的ACCESS EXCLUSIVE鎖, 這阻塞了表上的所有其他并發(fā)操作。如果請求對一個表的并發(fā)訪問,那么反而應(yīng)該使用DELETE 命令。
TRUNCATE不能用于有參照其他表的外鍵的表,除非所有這些表也在相同的命令中 被縮短。在這種情況下檢查有效性需要掃描表,并且整個點(diǎn)不會做一個。CASCADE 選項可以用于自動包括所有依賴表—但在使用該選項時會非常有用,否則你可能會失去你 您不想要的數(shù)據(jù)!
TRUNCATE不會觸發(fā)人任何可能為表存在的ON DELETE觸發(fā)器。 但它會觸發(fā)ON TRUNCATE觸發(fā)器。如果ON TRUNCATE觸發(fā)器 為任何表定義,然后所有的BEFORE TRUNCATE觸發(fā)器會在任何事物發(fā)生之前 觸發(fā),并且所有AFTER TRUNCATE觸發(fā)器會在最后一個事務(wù)執(zhí)行后被觸發(fā)。 該觸發(fā)器會以表執(zhí)行的順序觸發(fā)(首先是命令中列出的,然后是任何基于級聯(lián)添加的)。
TRUNCATE并不是MVCC-safe的(參閱Chapter 13獲取關(guān)于MVCC的基本信息)。 階段以后,標(biāo)記將會對所有的并發(fā)事務(wù)出現(xiàn)空,即使他們在截斷發(fā)生前使用快照。這將 是一個針對事物發(fā)生之前訪問截斷表的事務(wù)的問題—任何這么做的事務(wù)至少持有一個 ACCESS SHARE鎖,這將鎖TRUNCATE直到事務(wù)完成。所以 所以截斷不會導(dǎo)致在相同表連續(xù)查詢的表內(nèi)容上的明顯不一致,但會導(dǎo)致截斷表和數(shù)據(jù)庫中其他表 在內(nèi)容上可見的不一致性。
TRUNCATE對表中的數(shù)據(jù)是事務(wù)安全的:如果周圍事物不提交,蓋世五會安全回滾。
任何作為使用RESTART IDENTITY選項的結(jié)果的ALTER SEQUENCE RESTART 操作都是非事務(wù)性的并將回滾失敗。為了最小化該風(fēng)險,這些操作僅在所有剩下的 TRUNCATE工作做完以后才執(zhí)行。然而,若TRUNCATE在一個之后終止的 事務(wù)鎖內(nèi)執(zhí)行,仍然是有風(fēng)險的。例如,思考:
BEGIN; TRUNCATE TABLE foo RESTART IDENTITY; COPY foo FROM ...; COMMIT;
如果COPY中途失敗,表數(shù)據(jù)回滾正確,但是序列將會剩下小于他們之前擁有的值, 可能會導(dǎo)致關(guān)鍵復(fù)制失敗或者在后來事務(wù)中的其他問題。如果這可能是一個問題,最好避免使用 RESTART IDENTITY,并接受表的新內(nèi)容將比舊的有更高的系列號。
階段表bigtable和fattable:
TRUNCATE bigtable, fattable;
清空bigtable和fattable表:
TRUNCATE bigtable, fattable;
同樣地,也重置任何相關(guān)的序列生成器:
TRUNCATE bigtable, fattable RESTART IDENTITY;
截斷表othertable,級聯(lián)到通過外鍵約束參照othertable 的任何表。
TRUNCATE othertable CASCADE;
清空othertable表,并且級聯(lián)清空所有通過外鍵 約束引用othertable的表:
TRUNCATE othertable CASCADE;
SQL:2008標(biāo)準(zhǔn)包括一個有語法 TRUNCATE TABLE tablename的 TRUNCATE命令。CONTINUE IDENTITY/RESTART IDENTITY 子句也出現(xiàn)在那個標(biāo)準(zhǔn)中,但是有輕微的不同和相關(guān)的含義。該命令的一些并發(fā)行為通過標(biāo)準(zhǔn)實(shí)現(xiàn)了定義, 所以,若必要,上面的注意應(yīng)該與其他實(shí)現(xiàn)考慮和比較。