| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Fast Forward | Next | |
DELETE 從指明的資料表裡刪除滿足 WHERE 子句的行。 如果 WHERE 子句不存在, 效果是刪除資料表中所有行。結果是一個有效的空資料表。
提示: TRUNCATE 是一個 PostgreSQL 擴展, 它提供一個更快的從資料表中刪除所有行的機制。
預設時 DELETE 將刪除所聲明的資料表和所有它的子資料表的記錄。 如果您希望只更新提到的資料表,您應該使用 ONLY 子句。
要對資料表進行刪除,您必須對它有 DELETE 權限, 同樣也必須有 SELECT 的權限,這樣才能對符合 condition 的值進行讀取操作。
PostgreSQL 讓您在 WHERE 條件裡引用其它資料表的字串。 比如,要刪除給出製片商製作的所有電影,我們可以
DELETE FROM films WHERE producer_id = producers.id AND producers.name = 'foo';
這裡實際發生的事情是在 films 和 producers 之間的一個連接, 然後所有成功連接的 films 行都標記為刪除。
DELETE FROM films WHERE producer_id IN (SELECT id FROM producers WHERE name = 'foo');
有時候連接風格比子查詢風格更容易寫或者執行更快。 一個反對連接風格的意見是,在查詢裡沒有明確地列出使用哪些資料表, 這樣就令這種風格比較容易出錯;並且它也無法處理自連接。