Мне нужен пример каскадного удаления. Мой вопрос: где его добавить? В таблице я создаю ПК или в других таблицах, где этот ПК сидит там как FK?
Могу ли я использовать «alter table» для добавления «on delete cascade» в существующую таблицу? Например, пожалуйста?
@edit MYSQL, используя phpMyAdmin
@edit 2
Хорошо ли это выглядит?
alter table wplaty drop foreign key pesel, add constraint pesel foreign key (pesel) references baza_osob(pesel) on delete cascade on update restrict;
Моя родительская таблица = baza_osob My child table = wplaty
PK является pesel, FK также является pesel.
@ edit3 Получил ошибку:
# 1025 – Ошибка при переименовании '. \ Projekt \ wplaty' to '. \ Projekt # sql2-1300-6c' (errno: 152)
каскадные директивы переходят в «дочерние» таблицы, например
create table parent ( id int primary key ) create table child ( id int primary key parent_id int, foreign key (parent_id) references parent (id) on delete cascade )
Никогда не пробовал делать альтернативный внешний ключ для изменения его настроек, но в худшем случае вы просто бросаете существующий FK и переопределяете его с новыми настройками.
На самом деле вы не добавляете «ON DELETE CASCADE» на стол. Это часть (или не) каждого определения внешнего ключа.
Вам нужно включить эту опцию для внешнего ключа. Если вы не добавили этот параметр при создании внешнего ключа, вы должны его воссоздать.
alter table <table> drop foreign key <fk name>; alter table <table> add constraint <fk name> foreign key (<column name>) references <ref tble>(<ref column) on delete cascade on update restrict;
В одном заявлении:
alter table <table> drop foreign key <old fk name>, add constraint <new fk name> foreign key (<column name>) references <ref tble>(<ref column) on delete cascade on update restrict;