我无法弄清楚为什么我会在这里收到错误。
CURRENT TABLES:
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 DELETE NO UPTION CASCADE上的操作:无法在引用中找到索引 引用列显示为第一列的表,或 表中的列类型与引用的表不匹配 约束。请注意ENUM和SET的内部存储类型 在使用> = InnoDB-4.1.12创建的表格中更改了此类列 新表中的此类列不能引用旧表。看到 http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html 正确的外键定义。
答案 0 :(得分:0)
您需要引用列的索引。索引中列的顺序很重要。在clients表中,将主键更改为
(`ClientID`,`Postcode`,`Age`)
这应该这样做
ALTER TABLE clients DROP PRIMARY KEY, ADD PRIMARY KEY (`ClientID`,`Postcode`,`Age`);