10

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

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

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

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

Не повторяйте тот же вопрос. Вы можете изменить свой предыдущий вопрос, чтобы добавить новую информацию.

Apr 09, 2012, 7:07 PMот

возможный дубликат<a href="http://stackoverflow.com/questions/10076921/cant-create-foreign-key-constraint">can&apos;t create foreign key constraint</a>

Apr 09, 2012, 7:06 PMот

5ответов

1

Еще одно дополнение: наборы символов полей должны совпадать.

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

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

22

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

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

7

Также убедитесь, что обе таблицы являются innoDB.

1

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

1

Эта проблема возникает из-за столбца

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

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

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

`Note_ID` int(11) UNSIGNED NOT NULL UNIQUE

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

RelatedQuestions