0

我正在尝试使用 SQL 脚本在 MySQL 上创建一个表,而 MySQL 数据库不断给我错误 150。我在 Navicat 和 MySQL Workbench 中都尝试了以下代码,并且都给出了 150 错误。

看来这是一个外键问题,但我实际上看不到我的代码有什么问题,并且想知道是否有更多经验丰富的数据库用户会对这个问题有所了解?

SET FOREIGN_KEY_CHECKS=0;
CREATE TABLE `network_invites` (
`invite_ID` int(11) NOT NULL AUTO_INCREMENT,
`invite_From` int(11) NOT NULL,
`invite_Network` int(11) NOT NULL,
`invite_NetCreator` int(11) NOT NULL,
`invite_Message` varchar(256) NOT NULL,
`invite_Date` date DEFAULT NULL,
PRIMARY KEY (`invite_ID`),
KEY `invite_From` (`invite_From`),
KEY `invite_Network` (`invite_Network`),
KEY `invite_NetCreator` (`invite_NetCreator`),
CONSTRAINT `network_invites_ibfk_1` FOREIGN KEY (`invite_From`) REFERENCES `users`     (`user_ID`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `network_invites_ibfk_2` FOREIGN KEY (`invite_Network`) REFERENCES `networks` (`network_ID`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `network_invites_ibfk_3` FOREIGN KEY (`invite_NetCreator`) REFERENCES `networks` (`network_Creator`) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=latin1;

我看不出 FK 问题是什么,这些字段确实存在于数据库中,并且它们具有相同的数据类型。

谢谢你的帮助。

4

4 回答 4

0

问题是一个错字:

CONSTRAINT `network_invites_ibfk_2` 
  FOREIGN KEY (`invite_Network`) 
  REFERENCES `networks` (`network_ID`)       ---<--- either here
  ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT `network_invites_ibfk_3` 
  FOREIGN KEY (`invite_NetCreator`) 
  REFERENCES `networks` (`network_Creator`)  ---<--- or here (more probable)
  ON DELETE CASCADE ON UPDATE CASCADE

您的networks表主键可能是network_ID而不是network_Creator

于 2012-05-07T15:19:34.397 回答
0

我认为解决方法是:

  1. 创建没有约束的表

  2. 使用 ALTER TABLE 添加约束

再次,这是一种解决方法,并且希望收到 people@mysql 或更有经验的人的来信

于 2012-05-07T15:02:00.897 回答
0

确保 2 个表类型都是 InnoDB。还要确保您的主键和外键都是未签名的。

所有这些设置都可以在 NaviCat 中使用“设计表”选项进行更改。

我已经多次遇到这个问题,并且 99% 的时间都可以解决这个问题。

于 2012-05-07T15:02:43.857 回答
0

您需要在 上具有索引users.user_IDnetworks.network_ID并且networks.network_Creator列的类型应该与表中的完全相同network_invites

于 2012-05-07T15:04:58.380 回答