所以我有我已經被困在了現在,而在我的任務以下問題:SQL:如何在刪除某些內容時更改數據庫?
當員工被刪除掉
我。將員工和部門中的FK設置爲空
ii。刪除在Works_On和從屬引用的行
我一直在想我應該使用CASE語句來做這件事,但我不確定我應該如何去構造SQL。我正在使用Postgresql。
以下鏈接是我的數據庫結構的截圖: http://puu.sh/rMLjp/886c6e8a5b.png
所以我有我已經被困在了現在,而在我的任務以下問題:SQL:如何在刪除某些內容時更改數據庫?
當員工被刪除掉
我。將員工和部門中的FK設置爲空
ii。刪除在Works_On和從屬引用的行
我一直在想我應該使用CASE語句來做這件事,但我不確定我應該如何去構造SQL。我正在使用Postgresql。
以下鏈接是我的數據庫結構的截圖: http://puu.sh/rMLjp/886c6e8a5b.png
你讀過的PostgreSQL manual on FOREIGN KEY constraints?
限制和級聯刪除是兩個最常見的選項。 RESTRICT防止刪除引用的行。 NO ACTION表示如果在檢查約束時仍然存在任何引用行,則會引發錯誤;如果不指定任何內容,這是默認行爲。 (這兩個選擇之間的主要區別在於,NO ACTION允許將檢查推遲到事務的後期,而RESTRICT則不)。CASCADE指定刪除引用行時,引用它的行應自動刪除以及。
還有兩個選項:SET NULL和SET DEFAULT。當引用行被刪除時,這些操作會導致引用行中的引用列分別被設置爲空值或它們的默認值。
例子:
CREATE TABLE works_on (
essn ... REFERENCES employee(ssn) ON DELETE SET NULL,
pno ...,
hours ...
);
我不能在數據類型從截圖你猜列。但是,手冊的摘錄和鏈接以及部分代碼示例應該會給你你需要知道的內容。
謝謝!閱讀後明確了我需要做的事情。 – shinryu333
我認爲你需要向我們展示表格結構(還有更好的一些數據)以獲得詳細的答案,但離開我的頭頂ON DELETE CASCADE聽起來像你可能想在這裏做的事情。 –
啊,我明白了。所以我在這裏不使用CASE。 我不確定這是否被允許,但這是我的數據庫結構與適用表的截圖。 http://puu.sh/rMLjp/886c6e8a5b.png – shinryu333