Ответ 1
Это поможет, если вы разместите сообщение об ошибке. Но я думаю, что вам просто не хватает скобки:
ALTER TABLE my_table
ADD CONSTRAINT my_fk
FOREIGN KEY (my_field)
REFERENCES my_foreign_table
ON DELETE CASCADE;
Я не могу понять, что это правильно, я пытаюсь изменить поле, чтобы быть внешним ключом, с каскадным удалением... что я делаю неправильно?
ALTER TABLE my_table
ADD CONSTRAINT $4
FOREIGN KEY my_field
REFERENCES my_foreign_table
ON DELETE CASCADE;
Это поможет, если вы разместите сообщение об ошибке. Но я думаю, что вам просто не хватает скобки:
ALTER TABLE my_table
ADD CONSTRAINT my_fk
FOREIGN KEY (my_field)
REFERENCES my_foreign_table
ON DELETE CASCADE;
Просто гадать: не следует ли добавлять внешний ключ вместо ограничения?
ALTER TABLE my_table ADD FOREIGN KEY (my_field) REFERENCES my_foreign_table;
Я все еще как-то пропустил ответ с явно указанным чужим столбцом (foreign_field
):
ALTER TABLE my_table
ADD CONSTRAINT my_fk
FOREIGN KEY (my_field)
REFERENCES my_foreign_table (foreign_field)
ON DELETE CASCADE;
Это работает для меня, я добавляю столбец в таблицу, а затем добавляю ограничение со ссылками на другую таблицу:
-- 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;