Ответ 1
Это потому, что первичный ключ таблицы notes
(Dev_ID,Note_ID)
, но вы ссылаетесь только на один из этих столбцов (Note_ID
) в своем ограничении.
Ограничение FK должно всегда состоять из всех столбцов PK.
Я получил этот аргумент при создании таблицы: неверно сформировано ограничение внешнего ключа.
{create table comment(
Comment_ID int UNSIGNED AUTO_INCREMENT not null,
User_1 varchar(50) not null,
Note_ID int(11) UNSIGNED not null,
PRIMARY key(Comment_ID),
CONSTRAINT `fk_1` FOREIGN KEY (`User_1`) REFERENCES `user` (`Dev_ID`),
CONSTRAINT `fk_2` FOREIGN KEY (`User_2`) REFERENCES `user` (`Dev_ID`),
CONSTRAINT `fk_3` FOREIGN KEY (`Note_ID`) REFERENCES `note`(`Note_ID`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
}
это нормально, когда я удаляю fk_3
это моя таблица примечаний
{
CREATE TABLE `note` (
`Dev_ID` varchar(50) NOT NULL,
`Note_ID` int(11) UNSIGNED NOT NULL,
`Title` varchar(200) NOT NULL,
`Time` datetime NOT NULL,
`Mood` int(11) NOT NULL,
`Body` varchar(3000) NOT NULL,
`Visible` tinyint(1) NOT NULL DEFAULT '1',
`Share` tinyint(1) NOT NULL DEFAULT '0',
`Update` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`Dev_ID`,`Note_ID`),
CONSTRAINT `fk_note_user` FOREIGN KEY (`Dev_ID`) REFERENCES `user` (`Dev_ID`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
}
Спасибо за помощь!
Это потому, что первичный ключ таблицы notes
(Dev_ID,Note_ID)
, но вы ссылаетесь только на один из этих столбцов (Note_ID
) в своем ограничении.
Ограничение FK должно всегда состоять из всех столбцов PK.
Также убедитесь, что обе таблицы являются innoDB.
В дополнение к ответам, которые были предоставлены, вы также получите эту ошибку, если типы полей не совпадают. Например, если вы попытались создать ограничение внешнего ключа между полем varchar
и поле int
.
Еще одно дополнение: кодировки полей должны совпадать.
В ссылочной таблице у меня был ascii в качестве кодировки по умолчанию: DEFAULT CHARSET=ascii
сообщалось show create table
. Я попытался создать таблицу реферирования с помощью DEFAULT CHARSET=utf
, и я получил "Внешнее ограничение ключа неверно сформировано".
После того, как я изменил это на DEFAULT CHARSET=ascii
в новой таблице (ссылка на нее), она была успешно создана.