Не удается добавить foreign key

170
11 марта 2019, 06:40

Пытаюсь добавить FK:

set foreign_key_checks = 0;
ALTER TABLE `science_redirects` 
ADD CONSTRAINT `fk-contest_id` 
FOREIGN KEY (`contest_id`) 
REFERENCES `contests` (`id`) 
ON DELETE CASCADE;
set foreign_key_checks = 1;

и мне пишет ошибку: [Err] 1823 - Failed to add the foreign key constraint 'fk-contest_id' to system tables. И так еще на куче ключей которые я пытаюсь добавить. Подскажите в чем дело?

DDL:

CREATE TABLE `science_redirects` (
  `id` int(11) NOT NULL,
  `old_id` int(11) NOT NULL,
  `contest_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `contests` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `number` smallint(6) DEFAULT NULL,
  `is_active` tinyint(1) NOT NULL DEFAULT '0',
  `is_completed` tinyint(1) NOT NULL DEFAULT '0',
  `show_certificates` tinyint(1) NOT NULL DEFAULT '0',
  `article_price` int(11) unsigned NOT NULL DEFAULT '0',
  `adviser_fullname` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `adviser_phone` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `main_text` longtext COLLATE utf8_unicode_ci,
  `about_text` longtext COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`),
  KEY `is_active` (`is_active`)
) ENGINE=InnoDB AUTO_INCREMENT=2020 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Answer 1

Проблема решилась сама собой. Оказывается название ключа должно быть уникальным для всей базы. Т.е. называть ключ надо примерно по такому правилу: fk-table-column, т.к. в разных таблицах могут быть столбцы с одинаковыми именами (что собственно у меня и было), а вот имя таблицы уже уникально для всей базы. Плохо только что об этом добром в ошибке не написало, а вместо этого какую-то дичь про "system tables" орало... После смены стратегии именования все ключи успешно добавились.

READ ALSO
Как адаптировать SPA под мобильную версию?

Как адаптировать SPA под мобильную версию?

Имеется одна страницаЕё нужно адаптировать под мобильные устройства

166
Как сделать Google Map внутри MockUp Макбука

Как сделать Google Map внутри MockUp Макбука

Имеется мокап макбука и клиент хочет чтобы карта была непосредственно внутри макбукаНо я понятия не имею как это сделать? Есть какие-то предположения

139
Смена фона с js

Смена фона с js

Написал код

147