簡體   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