?
This document uses PHP Chinese website manual Release
如果你創(chuàng)建了一個包含許多表,并且?guī)в型怄I約束、視圖、觸發(fā)器、函數(shù)等復(fù)雜的數(shù)據(jù)庫結(jié)構(gòu)。那么你就會在對象之間隱含地創(chuàng)建了一個依賴性的網(wǎng)絡(luò)。比如,一個帶有外鍵約束的表依賴于它所引用的表。
為了保證整個數(shù)據(jù)庫結(jié)構(gòu)的完整性,PostgreSQL保證你無法刪除那些還被其它對象依賴的對象。比如,試圖刪除在Section 5.3.5里被訂單表所依賴的產(chǎn)品表是不能成功的,會有類似下面的錯誤信息出現(xiàn):
DROP TABLE products; NOTICE: constraint orders_product_no_fkey on table orders depends on table products ERROR: cannot drop table products because other objects depend on it HINT: Use DROP ... CASCADE to drop the dependent objects too.
這個錯誤信息包含一個有用的提示:如果你不想麻煩的分別刪除所有依賴對象,你可以運行
DROP TABLE products CASCADE;
然后所有被依賴的對象都將被刪除(并不刪除訂單表,只是刪除外鍵約束)。如果你想檢查DROP ... CASCADE會干什么,運行不帶CASCADE的DROP然后閱讀NOTICE信息。
PostgreSQL里的所有刪除命令都支持聲明CASCADE。當(dāng)然,具體的依賴性實體取決于對象的類型。 你也可以寫RESTRICT而不是CASCADE以獲取缺省的行為(僅限于刪除那些其它對象所依賴的對象)。
Note: 根據(jù)SQL標(biāo)準(zhǔn),要求至少聲明RESTRICT或CASCADE中的一個。實際上沒有哪種數(shù)據(jù)庫系統(tǒng)強制這一點,但是缺省的行為是RESTRICT還是CASCADE則因系統(tǒng)而異。
Note: 在PostgreSQL7.3之前的外鍵約束依賴性和序列字段依賴性在升級過程中都不會得到維護或者創(chuàng)建。所有其它的依賴性類型 在從7.3版本以前的數(shù)據(jù)庫升級過程中都將得到恰當(dāng)?shù)膭?chuàng)建。