2010-06-09 102 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;