我正在尝试使用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问题是什么,这些字段确实存在于数据库中,并且它们具有相同的数据类型。
感谢您的帮助。
答案 0 :(得分:0)
我认为解决方法是:
创建没有约束的表
使用ALTER TABLE
再次,这是一种解决方法,并希望听到人们@ mysql或更有经验的人
答案 1 :(得分:0)
确保2种表类型都是InnoDB。还要确保您的主键和外键都是无符号的。
可以使用“设计表”选项在NaviCat中更改所有这些设置。
我多次遇到过这个问题,99%的情况下都可以解决这个问题。
答案 2 :(得分:0)
您需要在users.user_ID
,networks.network_ID
和networks.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
。