MySQL错误#1005 errno 150

时间:2017-11-02 11:40:29

标签: mysql

我无法弄清楚为什么我会在这里收到错误。

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的外键约束出错:

     

外键(ClientIDPostcodeAge)参考   FYPClientsClientIDPostcodeAge)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   正确的外键定义。

1 个答案:

答案 0 :(得分:0)

您需要引用列的索引。索引中列的顺序很重要。在clients表中,将主键更改为

(`ClientID`,`Postcode`,`Age`)

这应该这样做

ALTER TABLE clients DROP PRIMARY KEY, ADD PRIMARY KEY (`ClientID`,`Postcode`,`Age`);