Удалить родительскую таблицу в MySQL - PullRequest
0 голосов
/ 14 июня 2011

Я создал две простые таблицы, чтобы проиллюстрировать этот вопрос.

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 для строк).

Есть предложения?

1 Ответ

1 голос
/ 14 июня 2011

Попробуйте сбросить само ограничение.изменить таблицу дочернего удаления внешнего ключа child_ibfk_1;

...