Я використовую "ON DELETE CASCADE" регулярно, але ніколи не використовую "ON UPDATE CASCADE", оскільки я не дуже впевнений, у якій ситуації це буде корисно.
Заради обговорення давайте подивіться якийсь код.
CREATE TABLE parent (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
);
CREATE TABLE child (
id INT NOT NULL AUTO_INCREMENT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE
);
У розділі "ON DELETE CASCADE", якщо батько із запитом id
видалено, запис у дитини, що має, parent_id = parent.id
буде автоматично видалений. Це не повинно бути жодних проблем.
Це означає, що "ON UPDATE CASCADE" зробить те саме, коли
id
оновлення батьків буде оновлено?Якщо (1) вірно, це означає, що немає необхідності використовувати "ON UPDATE CASCADE", якщо
parent.id
він не може бути оновлений (або ніколи не буде оновлюватися), як коли він єAUTO_INCREMENT
або завжди встановленийTIMESTAMP
. Це так?Якщо (2) не відповідає дійсності, в якій іншій ситуації ми повинні використовувати "НА ПОНОВНІЙ КАСКАД"?
Що робити, якщо я (з якихось причин) оновлюю файл на
child.parent_id
щось, що не існує, воно буде автоматично видалено?
Ну, я знаю, деякі з питань, поданих вище, можна перевірити програмно, щоб зрозуміти, але я також хочу знати, чи щось від цього залежить від постачальника баз даних чи ні.
Будь ласка, пролийте трохи світла.