2010-06-09 98 views
41

我似乎無法得到這個權利,我想修改一個字段是一個外鍵,級聯刪除......我做錯了什麼?Postgresql約束

ALTER TABLE my_table 
ADD CONSTRAINT $4 
FOREIGN KEY my_field 
REFERENCES my_foreign_table 
ON DELETE CASCADE; 

回答

76

如果您發佈的錯誤信息這將有助於。但我認爲你只是缺少括號:

ALTER TABLE my_table 
ADD CONSTRAINT my_fk 
FOREIGN KEY (my_field) 
REFERENCES my_foreign_table 
ON DELETE CASCADE; 
+1

@Magnus Hagander,爲什麼是「ON DELETE CASCADE」有用嗎?我不明白它...... – 2013-04-07 02:22:15

+4

@Stephane查看接受的答案[這個問題](http://stackoverflow.com/questions/14141266/postgresql-foreign-key-on-delete-cascade)「_A外鍵級聯刪除意味着如果父表中的記錄被刪除,那麼子表中的相應記錄將自動被刪除,這被稱爲級聯刪除。「看起來像你不想自動包含的東西,除非你想將表格綁定在一起而不是僅僅創建一個引用。 – 2013-06-21 15:22:01

+0

@RichardD,當你沒有包含它時,你必須在查詢中使用CASCADE關鍵字,並且你會記住後果:) – Line 2014-12-11 11:55:33

12

只是猜測:你不應該添加一個外鍵而不是一個約束?

ALTER TABLE my_table ADD FOREIGN KEY (my_field) REFERENCES my_foreign_table; 

Postgresql reference

+12

外鍵*是*約束... – 2010-06-09 12:00:43

12

我仍然不知何故在這裏失去了與國外柱(foreign_field)的答案明確指定:

ALTER TABLE my_table 
ADD CONSTRAINT my_fk 
FOREIGN KEY (my_field) 
REFERENCES my_foreign_table (foreign_field) 
ON DELETE CASCADE; 
1

這工作對我來說,我添加列表中,然後與其他表引用添加約束:

-- add column to table 
ALTER TABLE schema.table ADD COLUMN my_column type; 

-- add constraint to column 
ALTER TABLE schema.table ADD CONSTRAINT fk_name FOREIGN KEY (column) 
REFERENCES schema.table (column) MATCH SIMPLE 
ON UPDATE NO ACTION ON DELETE NO ACTION;