错误(150)由SQL脚本生成?

时间:2012-05-07 14:30:27

标签: mysql sql database

我正在尝试使用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 个答案:

答案 0 :(得分:0)

我认为解决方法是:

  1. 创建没有约束的表

  2. 使用ALTER TABLE

  3. 添加约束

    再次,这是一种解决方法,并希望听到人们@ mysql或更有经验的人

答案 1 :(得分:0)

确保2种表类型都是InnoDB。还要确保您的主键和外键都是无符号的。

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

我多次遇到过这个问题,99%的情况下都可以解决这个问题。

答案 2 :(得分:0)

您需要在users.user_IDnetworks.network_IDnetworks.network_Creator上建立索引,并且列的类型应与network_invites表中的列完全相同。

答案 3 :(得分: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