Внешнее ограничение на удаление каскада не работает - PullRequest
1 голос
/ 20 марта 2012

У меня есть пользовательская таблица, которая имеет внешнее ограничение на таблицу core_website. Однако on delete cascade не работает.

Я выполнил поиск и нашел соответствующую ветку , в которой отмечается, что типы данных между двумя столбцами должны быть одинаковыми. Оба типа данных smallint(5).

Я заметил одно небольшое несоответствие в определении столбца, которое заключается в том, что в core_website Allow Null установлен not , а Default не установлен на ноль, тогда как в таблице учетных записей Allow Null установлено и значение по умолчанию равно нулю. Я не думал, что их изменение окажет какое-либо влияние, но я пошел дальше и изменил их в таблице счетов, чтобы соответствовать, но это не помогло.

CREATE TABLE `account` (
  `account_id` smallint(11) unsigned NOT NULL AUTO_INCREMENT,
  `website_id` smallint(5) unsigned DEFAULT '0',
  `code` varchar(64) NOT NULL DEFAULT '',
  PRIMARY KEY (`account_id`),
  UNIQUE KEY `code` (`code`),
  KEY `FK_WEBSITE_ID` (`website_id`),
  CONSTRAINT `FK_WEBSITE_ID` FOREIGN KEY (`website_id`) REFERENCES `core_website` (`website_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8

Ответы [ 2 ]

1 голос
/ 20 марта 2012

попробуйте и дайте нам результат.

CREATE TABLE `account` (
  `account_id` smallint(11) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `website_id` smallint(5) unsigned DEFAULT '0',
  `code` varchar(64) NOT NULL DEFAULT '',
  UNIQUE KEY `code` (`code`),
  KEY `FK_WEBSITE_ID` (`website_id`),
  CONSTRAINT `FK_WEBSITE_ID` FOREIGN KEY (`website_id`) REFERENCES `core_website` (`website_id`) ON DELETE CASCADE ON UPDATE CASCADE  
) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8
0 голосов
/ 21 марта 2012

Вам необходимо добавить внешний ключ в таблицу core_website и указать его в поле website_id в таблице account.Другими словами, внешний ключ следует добавить в зависимую таблицу и указать на основную таблицу, в этом случае при удалении строки из основной таблицы - строка из зависимой таблицы будет удалена из-за FK.В вашем случае вы сделали это "с ног на голову".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...