PostgreSQL 约束

43

我似乎无法做对这个,我试图修改一个字段为外键,并进行级联删除...我做错了什么?

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

81

如果您可以发布错误消息,那将有所帮助。但我认为您只是漏了括号:

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

4
请看这个问题的被接受的答案:"在一个外键上使用级联删除意味着如果父表中的一条记录被删除,则相应的子表中的记录将自动被删除。这被称为级联删除。" 似乎除非您想绑定表而不仅是创建引用,否则您不希望自动包含此功能。 - Richard D
@RichardD,如果您不包含它,则必须在查询中使用CASCADE关键字,并且您必须记住后果 :) - Line
1
如果带有外键的数据在没有引用数据的情况下没有意义,那么@Line可以自动级联删除非常有用。删除引用数据后保存该数据也没有任何意义。 - Steen Schütt
如果你需要在表中引用一列,请使用 REFERENCES my_foreign_table(my_foreign_column) - NuclearPeon

13

我猜想:你应该添加一个外键而不是约束条件吧?

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

Postgresql参考文档


13

我在这里仍然缺少一个明确指定了外部列(foreign_field)的答案:

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

2

这对我有用,我将列添加到表中,然后使用引用其他表的约束条件进行添加:

-- 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; 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接