繁体   English   中英

MySQL错误#1005错误150

[英]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的外键约束错误:

外键( ClientIDPostcodeAge )参考FYP ClientsClientIDPostcodeAge )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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM