Не могу добавить внешний ключ в базу данных MySQL

Попытка создать простую связь между двумя полями в двух таблицах - таблице "Задача" с полем "USER_TOKEN" и таблице "ПОЛЬЗОВАТЕЛЬ" с полем "ТОКЕН". Два поля имеют одинаковую структуру. Как вы видите ошибку и другие вещи, которые могут помочь вам понять проблему и устранить ее.

Система: MacOS 10.12.3 | БД: MySQL 5.7.17 | DBM: Sequel Pro

Ошибка: MySQL сказал: не могу добавить ограничение внешнего ключа

CREATE TABLE `TASK` (
  `ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `USER_TOKEN` int(11) unsigned NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `USER` (
  `ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `TOKEN` int(11) unsigned NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE USER
ADD CONSTRAINT TOKENS
FOREIGN KEY (`TOKEN`) REFERENCES `category`(`USER_TOKEN`)

Благодарю.

1 ответ

Если вы действительно хотите создать внешний ключ для не-первичного ключа, это ДОЛЖЕН быть столбец с unique ограничение на это.

Ограничение FOREIGN KEY не обязательно должно быть связано только с ограничением PRIMARY KEY в другой таблице; он также может быть определен для ссылки на столбцы ограничения UNIQUE в другой таблице.

Так что ваши USER_TOKEN столбец таблицы TASK а также TOKEN столбец USER стол должен быть UNIQUE, Итак, запустите следующий запрос:

CREATE TABLE `TASK` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`USER_TOKEN` int(11) unsigned NOT NULL UNIQUE,
 PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `USER` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`TOKEN` int(11) unsigned NOT NULL UNIQUE,
 PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


ALTER TABLE `USER`
ADD CONSTRAINT `TOKENS`
FOREIGN KEY (`TOKEN`) REFERENCES `TASK`(`USER_TOKEN`);

Проверьте Демо здесь

Другие вопросы по тегам