Я создал две простые таблицы, чтобы проиллюстрировать этот вопрос.
CREATE TABLE `child` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`father_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX_22B354292055B9A2` (`father_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
CREATE TABLE `father` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
ALTER TABLE `child`
ADD CONSTRAINT `child_ibfk_1` FOREIGN KEY (`father_id`) REFERENCES `father` (`id`)
ON DELETE CASCADE;
Представьте, что в дочерней таблице есть строки, связанные с родительской таблицей через внешний ключ.
Если я удаляю строку в родительской таблице, у которой есть строки, связанные с ней в дочерней таблице, я могу удалить ее в любом случае, потому что у меня активирован «ON DELETE CASCADE».
Проблема вчто если я попытаюсь отбросить родительскую таблицу, даже если нет строк ни в родительской таблице, ни в дочерней таблице, я получу следующее сообщение об ошибке (в phpmyadmin):
#1217 - Cannot delete or update a parent row: a foreign key constraint fails
Я пробовал этокоманда:
SET foreign_key_checks = 0;
Но появляется то же сообщение об ошибке.
Я мог бы удалить всю базу данных и создать ее заново, но я не хочу этого делать, если есть другое решение (например, ON DELETE CASCADE для строк).
Есть предложения?