Я создаю две таблицы, подобные этой:
CREATE TABLE abc (
id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(64) NOT NULL,
created DATETIME DEFAULT '0000-00-00 00:00:00',
updated DATETIME DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE def (
abc_id INTEGER NOT NULL DEFAULT 0,
name VARCHAR(64) NOT NULL,
value LONGTEXT,
PRIMARY KEY(name, abc_id),
CONSTRAINT fk_def FOREIGN KEY(id)
REFERENCES abc(id) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
, который должен сказать MySQL автоматически удалять соответствующую строку из DEF при удалении строки из ABC.
Но это не очень хорошо работает с операциями DROP.
Если я пытаюсь удалить таблицу abc, я получаю сообщение об ошибке, сообщающее, что нарушение внешнего ключа не выполняется.
Похоже, что мне нужно сначала удалить DEF, и только потом я могу сбросить ABC. Я не понимаю почему, потому что сброс ABC должен автоматически сбросить DEF, верно? Или хотя бы очистить его, удалив строки, соответствующие идентификатору из ABC ...