2014-02-12 91 views
0

我在我的數據庫中有兩個名爲useraccount的表。 user表具有名爲account_id的外鍵列,該列綁定到表accountid列。如何刪除PostgreSQL中具有有效引用鍵的行

更具體地說,簡化的數據庫結構如下:

CREATE TABLE account (
      id INTEGER PRIMARY KEY, 
      name VARCHAR NOT NULL UNIQUE 
); 

CREATE TABLE "user" (
      id INTEGER PRIMARY KEY, 
      login VARCHAR NOT NULL UNIQUE, 
      pass VARCHAR NOT NULL, 
      account_id INTEGER NOT NULL, 
      CONSTRAINT account_fk FOREIGN KEY (account_id) 
     REFERENCES account (id) ON DELETE CASCADE ON UPDATE CASCADE NOT DEFERRABLE 
); 

我想知道是否可以刪除表user一行也沒有刪除account由特定的記錄被引用?

每當我嘗試刪除account時,表user中的相關行也會被刪除(由於ON DELETE CASCADE子句)。但是,我需要在另一個方向發生同樣的一系列事件。

+1

如果兩個或兩個以上用戶引用_the same_ account.id,會發生什麼情況? – wildplasser

+0

我有一對一的關係。 – irko

+0

如果你真的有一對一的關係,你可以將兩個表合併爲一個。無需額外的邏輯! – wildplasser

回答

0

使用觸發該

CREATE OR REPLACE FUNCTION delete_account() RETURNS trigger AS 
$$ 
BEGIN 
    DELETE FROM account WHERE id = OLD.account_id; 
END 
$$ 
LANGUAGE 'plpgsql' VOLATILE; 

CREATE TRIGGER trig_delete_account 
    AFTER DELETE ON "user" 
    FOR EACH ROW 
EXECUTE PROCEDURE delete_account(); 

但是請記住,其他用戶引用相同的帳戶也將被刪除。您可能擁有一對一的關係,並且需要user.account_id上的唯一鍵來執行該操作。

+0

謝謝你的回覆。但我們的數據庫被改變了,所以問題變得不真實:)但我會記住它! – irko

相關問題