[英]MySQL error #1005 errno 150
我不知道为什么我在这里出错。
当前表:
CREATE TABLE `Clients` (
`ClientID` varchar(8) NOT NULL,
`Age` varchar(20) NOT NULL,
`Postcode` varchar(6) NOT NULL,
PRIMARY KEY (`ClientID`,`Age`,`Postcode`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `Disclosure` (
`ClientID` varchar(8) NOT NULL,
`Fname` varchar(100) DEFAULT NULL,
`Lname` varchar(100) DEFAULT NULL,
`Email` varchar(100) DEFAULT NULL,
`Postcode` varchar(6) NOT NULL,
`Offender` varchar(45) DEFAULT NULL,
`Location` varchar(100) DEFAULT NULL,
`Age` varchar(20) NOT NULL,
`Support` varchar(45) DEFAULT NULL,
`Disclosure` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`ClientID`,`Postcode`,`Age`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
试图添加外键
ALTER TABLE `FYP`.`Disclosure`
ADD CONSTRAINT `client`
FOREIGN KEY (`ClientID` , `Postcode` , `Age`)
REFERENCES `FYP`.`Clients` (`ClientID` , `Postcode` , `Age`)
ON DELETE NO ACTION
ON UPDATE CASCADE;
我尝试使用show status查看错误是什么,但我仍然无法弄清楚。
SHOW ENGINE INNODB STATUS
返回:
------------------------最新外键错误---------------------- -171102 11:35:10表FYP /#sql-266_33b的外键约束错误:
外键(
ClientID
,Postcode
,Age
)参考FYP
。Clients
(ClientID
,Postcode
,Age
)ON在更新级联时未删除任何操作:无法在引用表中找到索引,其中引用列显示为第一列,或者表中的列类型与引用表的约束不匹配。 请注意,在使用> = InnoDB-4.1.12创建的表中,ENUM和SET的内部存储类型已更改,并且新表中的此类列不能引用旧表中的此类列。 有关正确的外键定义,请参见http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html 。
您需要在引用列上建立索引。 索引中各列的顺序很重要。 在客户表中将主键更改为
(`ClientID`,`Postcode`,`Age`)
这应该做
ALTER TABLE clients DROP PRIMARY KEY, ADD PRIMARY KEY (`ClientID`,`Postcode`,`Age`);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.