[英]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.