Je n'arrive pas à comprendre cela, j'essaie de modifier un champ pour qu'il soit une clé étrangère, avec suppression en cascade ... que fais-je de mal?
ALTER TABLE my_table
ADD CONSTRAINT $4
FOREIGN KEY my_field
REFERENCES my_foreign_table
ON DELETE CASCADE;
Il serait utile que vous publiiez le message d'erreur. Mais je pense que vous manquez juste la parenthèse:
ALTER TABLE my_table
ADD CONSTRAINT my_fk
FOREIGN KEY (my_field)
REFERENCES my_foreign_table
ON DELETE CASCADE;
Juste deviner: ne devriez-vous pas ajouter une clé étrangère au lieu d'une contrainte?
ALTER TABLE my_table ADD FOREIGN KEY (my_field) REFERENCES my_foreign_table;
Il me manque encore en quelque sorte ici une réponse avec une colonne étrangère (foreign_field
) explicitement spécifié:
ALTER TABLE my_table
ADD CONSTRAINT my_fk
FOREIGN KEY (my_field)
REFERENCES my_foreign_table (foreign_field)
ON DELETE CASCADE;
Cela fonctionne pour moi, j'ajoute la colonne à la table, puis j'ajoute la contrainte avec des références à l'autre table:
-- 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;