Задать вопрос
@lozhkinandrei

Как работает ON DELETE CASCADE в MySQL?

Всем привет!
Не могу найти и разобраться в том как именно работает ссылочная целостность на примере ON DELETE CASCADE в MySQL.
Есть родительская таблица:
CREATE TABLE ReportDate
(
   report_id              int unsigned auto_increment   NOT NULL, 
   report_date          smalldatetime    NOT NULL   DEFAULT CURRENT_SMALLDATETIME(),
   PRIMARY KEY (report_id)
);

Есть дочерняя таблица:
CREATE TABLE Report
(
   report_id            int unsigned     NOT NULL, 
   user_id               int unsigned     NOT NULL,
   PRIMARY KEY (report_id),
   FOREING KEY (report_id) REFERENCES ReportDate(report_id)
                          ON DELETE CASCADE,
   FOREING KEY (user_id) REFERENCES UserLogin(user_id)
);

В случае удаления строки данных по конкретному report_id что произойдет в дочерних таблицах? Будут удалены данные в одной только "ячейке" report_id (с обращением в NULL, тогда у этого аргумента должно быть допустимо NULL; тогда соответственно в чем разница с SET NULL)? Или будет удалена вся строка данных в дочерней таблице, связанная с удаленным конкретным report_id (т.е. и конкретный report_id и соответствующий ему user_id)?
PS: не судите строго за качество вопроса и кода - учусь в процессе...
  • Вопрос задан
  • 6446 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
grabbee
@grabbee
ON DELETE CASCADE - удалит строку в подчиненной таблице при удалении в главной.
SET NULL - установить значение ID в NULL если удалить строку в главной таблице. Для этого в подчиненной таблице для этой колонки должно быть позволено NULL значение.

Ограничения устанавливаются в каждой подчиненной таблице. Что установите ON DELETE CASCADE или SET NULL - то и произойдет.

Подробно описано на русском https://metanit.com/sql/mysql/2.5.php
Мне помогло...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы