У меня есть одна таблица, ссылающаяся на другую. Как я вижу - есть два способа удаления каскадирование:SQL Create Trigger Before Delete vs Foreign Key On Delete
Что разница между CREATE TRIGGER BEFORE DELETE
и FOREIGN KEY ON DELETE
? Существуют ли различия в производительности?
Я воспользовался этим преимуществом FOREIGN KEY
:
Каскадное удаление более очевидно, потому что оно прикреплено в определении таблицы.
Полный вопрос:
У меня есть две таблицы:
project(id, ...) <- works_on(id, project_id, ...)
Каковы различия в
CREATE TABLE works_on (
...
FOREIGN KEY (project_id) REFERENCES project ON DELETE CASCADE
...
);
и
CREATE TRIGGER trigger_delete_cascading
BEFORE DELETE ON project
DELETE works_on
WHERE project_id = id;
Они очень похожи. Я бы посоветовал вам всегда идти с каскадным удалением (если это то, что вы хотите), поэтому база данных заботится о реляционной целостности. Это также имеет преимущество проверки значения в столбце. –
В моем случае ваш комментарий и принятый ответ Сержа разрешают эту тайну. Sagar Gangwal также посоветовал использовать «Foreign Key» в отношении большей последовательности: http://stackoverflow.com/a/42114888/1700776 – Vadammt