Не могу добавить внешний ключ в базу данных 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`);
Проверьте Демо здесь