?
This document uses PHP Chinese website manual Release
DELETE FROM [ ONLY ] table [ [ AS ] alias ] [ USING using_list ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
DELETE從指定的表里刪除滿足WHERE子句的行。 如果WHERE子句不存在,將刪除表中所有行。結果是一個有效的空表。
Tip: TRUNCATE 是一個PostgreSQL擴展, 它提供一個更快的從表中刪除所有行的機制。
缺省時DELETE將刪除所聲明的表及其所有子表的記錄。如果你希望只刪除指定的表, 你應該使用ONLY子句。
使用數據庫中其它表的信息刪除某個表中的數據行有兩個辦法:使用子查詢, 或者在USING子句中聲明額外的表。哪種技巧更合適取決于特定的環(huán)境。
可選的RETURNING子句將使得DELETE計算并返回實際被刪除了的行。 任何使用表字段的表達式和/或USING中提到的其他表的字段,都可以用于計算。 RETURNING列表的語法和SELECT輸出列表的語法相同。
要對表進行刪除,你必須對它有DELETE權限, 同樣也必須有USING子句的表以及condition 上讀取的表的SELECT權限。
如果聲明了這個選項,則只從指定的表中刪除數據行。否則從指定的表及其所有子表中的刪除。
一個現(xiàn)存表的名字(可以有模式修飾)
目標表的別名。如果提供了別名,那么它將完全掩蓋實際的表名。例如給定DELETE FROM foo AS f之后,DELETE語句的剩余部分必須使用f而不是foo來引用該表。
表表達式列表,允許來自其他表的列出現(xiàn)在WHERE條件中。這與可以在SELECT命令的FROM子句子句 中指定的表列表相似。例如,可以為該表的名字聲明一個別名。不要在using_list里重復目標表,除非你希望產生一個自連接。
返回一個boolean類型值的表達式。僅僅對于表達式返回true的行進行刪除。
在WHERE CURRENT OF環(huán)境下使用的游標的名稱。要刪除的行是一個最近從這個游標 獲取的。游標必須是DELETE目標表上的一個非分組查詢。請注意: WHERE CURRENT OF不能與一個布爾類型一同聲明。請參閱DECLARE 獲取更多關于使用帶WHERE CURRENT OF的游標的更多詳細信息。
在每行刪除后,通過DELETE命令來計算和返回的表達式。表達式可以使用 table的任意列名或者USING中 列出的任意表。寫*來返回所有列。
用于返回列的一個名稱。
成功時,DELETE 命令返回形如
DELETE count
count是被刪除的行數。如果為 0 則表示沒有行匹配 condition,這個不認為是錯誤。
如果DELETE命令包含一個RETURNING子句,那么其結果非常類似于 SELECT語句基于RETURNING子句中包含的字段和值列表的結果, 只是基于被刪除的行進行計算而已。
PostgreSQL允許你在WHERE條件里引用其它表的字段, 方法是在USING子句里聲明其它表。比如,要刪除給出制片商制作的所有電影, 可以這樣做:
DELETE FROM films USING producers WHERE producer_id = producers.id AND producers.name = 'foo';
這里實際發(fā)生的事情是在films和producers之間的一個連接, 然后所有成功連接的films行都標記為刪除。這個語法不是標準的,更標準的語法是這么做:
DELETE FROM films WHERE producer_id IN (SELECT id FROM producers WHERE name = 'foo');
有時候連接風格比子查詢風格更容易寫或者執(zhí)行更快。
刪除所有電影(films)但不刪除音樂(musicals):
DELETE FROM films WHERE kind <> 'Musical';
清空films表:
DELETE FROM films;
從 tasks 表及其子表中刪除,并返回所有被刪除的行:
DELETE FROM tasks WHERE status = 'DONE' RETURNING *;
刪除tasks的行,游標當前就放置在c_tasks上:
DELETE FROM tasks WHERE CURRENT OF c_tasks;
這條命令遵循SQL標準,但是USING和RETURNING 子句是PostgreSQL的擴展。