Вопрос по mysql – Ограничение внешнего ключа сформировано неправильно?

10

Я получил эту ошибку при создании таблицы: ограничение внешнего ключа неправильно сформировано ???

{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
}

Спасибо за помощь!

возможный дубликатcan't create foreign key constraint Marc B
Не повторяйте тот же вопрос. Вы можете изменить свой предыдущий вопрос, чтобы добавить новую информацию. Marc B

Ваш Ответ

5   ответов
1

которые были даны, вы также получите эту ошибку, если типы полей не совпадают. Например, если вы пытались создать ограничение внешнего ключа междуvarchar поле иint поле.

Кроме того, это может быть очень подлый!INT(10) это не то же самое, чтоINT(11) и подписание ценностей также имеет значение. Они должны быть идентичными. MySQL хорош в выдаче сообщений об ошибках мусора, и это не исправлено в MariaDB.
22

notes стол(Dev_ID,Note_ID) но вы ссылаетесь только на один из этих столбцов (Note_ID) в вашем ограничении.

Ограничение FK всегда должно состоять из всех столбцов PK.

Или все уникально. Если он создаетUNIQUE KEY (Note_ID) на столеNoteФК будет работать нормально.
я изменяю таблицу комментариев на {создать комментарий к таблице (Comment_ID int UNSIGNED AUTO_INCREMENT не нулевой, Владелец varchar (50) не нулевой, Note_ID int (11) UNSIGNED не нулевой, Commenter varchar (50) не нулевой, PRIMARY ключ (Comment_ID), CONSTRAINTfk_1 ИНОСТРАННЫЙ КЛЮЧ (Owner,Note_ID) РЕКОМЕНДАЦИИnote(Dev_ID,Note_ID), ОГРАНИЧЕНИЕfk_2 ИНОСТРАННЫЙ КЛЮЧ (Commenter)РЕКОМЕНДАЦИИuser(Dev_ID)) ENGINE = InnoDB CHARSET DEFAULT = utf8} И я получил «Дублирующийся ключ при записи или обновлении» user1235872
@ user1235872: & quot; дублирующийся ключ & quot; означает, что вы вводите одинаковые значения дважды для первичного ключа.
Этот ответ только что дал мне правильную подсказку для моего дела. Я использовал только один столбец, но в качестве ключа было выбрано два. THX и +1 отсюда: D
1

В указанной таблице у меня была ascii как кодировка по умолчанию:DEFAULT CHARSET=ascii было сообщеноshow create table, Я пытался создать таблицу ссылок сDEFAULT CHARSET=utf и я получил "ограничение внешнего ключа неправильно сформировано".

После того как я изменил это наDEFAULT CHARSET=ascii на новой таблице (ссылающейся) она была успешно создана.

1

`Note_ID` int(11) UNSIG,NED NOT NULL

Не является ни первичным, ни уникальным.

Просто сделай это

`Note_ID` int(11) UNSIGNED NOT NULL UNIQUE

И это будет работать.

7

@ Добро пожаловать. MySql иногда сходит с ума, показывая нам полные сообщения об ошибках.
это работа! спасибо
Я бы тебя сотворил, если бы мог, большое спасибо!

Похожие вопросы