У меня есть ограничение внешнего ключа в моей таблице, я хочу добавить ON DELETE CASCADE к нему.
Я пробовал это:
изменить таблицу child_table_name изменить ограничение fk_name внешний ключ (child_column_name) ссылается parent_table_name (parent_column_name) на каскад удаления;
Не работает
РЕДАКТИРОВАТЬ:
Внешний ключ уже существует, в столбце внешнего ключа есть данные.
Сообщение об ошибке, которое я получаю после выполнения инструкции:
ORA-02275: такое ссылочное ограничение уже существует в таблице
Ответы:
Вы не можете добавить
ON DELETE CASCADE
к уже существующим ограничениям. Вы должны будетеdrop
и повторноcreate
ограничить. В документации показывает , чтоMODIFY CONSTRAINT
положение может изменить только состояние ограничения (то есть:ENABLED/DISABLED
...).источник
Сначала
drop
введите ваш внешний ключ и попробуйте команду, указанную выше,add constraint
вместоmodify constraint
. Теперь это команда:источник
Этот PL * SQL запишет в DBMS_OUTPUT скрипт, который удалит каждое ограничение, не имеющее каскад удаления, и заново создаст его с помощью каскада удаления.
ПРИМЕЧАНИЕ: запуск выходных данных этого сценария выполняется на свой страх и риск. Лучше всего прочитать полученный скрипт и отредактировать его перед выполнением.
источник
Как объяснялось ранее:
Как вы видите, эти команды должны быть разделены, сначала отбрасывая, затем добавляя.
источник
go
с точкой с запятой, как в postgres и самом SqlServer. Но оставшиеся основные коды соответствуют стандарту sql. Тест с[
Или]
недействительны в стандарте SQL (и Oracle). Oracle также не поддерживаетon update
предложение для внешнего ключа.[
]
специфичны для SqlServer. Я почищу еще. Насчетon update
ничего не могу сказать.Ответ для ПОЛЬЗОВАТЕЛЕЙ MYSQL:
источник
Для тех, кто использует MySQL:
Если вы перейдете на свою
PHPMYADMIN
веб-страницу и перейдете к таблице с внешним ключом, который вы хотите обновить, все, что вам нужно сделать, это щелкнуть значок,Relational view
расположенный наStructure
вкладке, и изменить параметрOn delete
меню выбора наCascade
.Изображение показано ниже:
источник
Вот удобное решение! Я использую SQL Server 2008 R2.
Если вы хотите изменить ограничение FK, добавив ON DELETE / UPDATE CASCADE, выполните следующие действия:
НОМЕР 1:
Щелкните ограничение правой кнопкой мыши и выберите " Изменить".
НОМЕР 2:
Выберите ограничение слева (если их больше одного). Затем с правой стороны сверните пункт « ВСТАВИТЬ И ОБНОВИТЬ спецификацию » и укажите действия в строке «Удалить правило» или «Обновить правило» в соответствии с вашими потребностями. После этого закройте диалоговое окно.
НОМЕР 3:
Последний шаг - сохранить эти модификации (конечно же!)
PS: Это избавило меня от кучи работы, так как я хочу изменить первичный ключ, указанный в другой таблице.
источник
Если вы хотите изменить внешний ключ, не отбрасывая его, вы можете сделать:
источник
источник