Mysql
mySQL - 無法添加外鍵約束
我正在嘗試添加外鍵約束,但是 mySQL 沒有採用它。沒有詳細的錯誤,只是
Cannot add foreign key constraint
這是我的出口轉儲程式碼… 感謝您的幫助
-- create tables CREATE TABLE `calltarget` ( `idCallTarget` int(11) NOT NULL, `idImportCTBatch` int(11) NOT NULL, `idBroker` int(11) NOT NULL, `idCallMaker` int(11) NOT NULL, `FirstName` varchar(40) DEFAULT NULL, `LastName` varchar(40) DEFAULT NULL, `StreetAddress` varchar(60) DEFAULT NULL, `City` varchar(30) DEFAULT NULL, `Province` varchar(10) DEFAULT NULL, `PostalCode` varchar(7) DEFAULT NULL, `MobilePhone` varchar(13) DEFAULT NULL, `HomePhone` varchar(13) DEFAULT NULL, `Email` varchar(80) DEFAULT NULL, `Broker` varchar(80) DEFAULT NULL, `Carrier` varchar(60) DEFAULT NULL, `Notes` varchar(250) DEFAULT NULL, `Status` int(11) DEFAULT NULL, `CUser` int(11) DEFAULT NULL, `Created` datetime DEFAULT NULL, `MUser` int(11) DEFAULT NULL, `Modified` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
…
CREATE TABLE `importctbatch` ( `idImportCTBatch` int(11) NOT NULL, `idBroker` int(11) NOT NULL, `idCallMaker` int(11) DEFAULT NULL, `ImpFileName` varchar(80) DEFAULT NULL, `ImpDate` datetime DEFAULT NULL, `ImpStep` int(11) DEFAULT '0', `Created` datetime DEFAULT NULL, `CUser` int(11) DEFAULT NULL, `Modified` datetime DEFAULT NULL, `MUser` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- add primary keys ALTER TABLE `calltarget` ADD PRIMARY KEY (`idCallTarget`); ALTER TABLE `importctbatch` ADD PRIMARY KEY (`idImportCTBatch`); -- set autoincrement ALTER TABLE `importctbatch` MODIFY `idImportCTBatch` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8; ALTER TABLE `calltarget` MODIFY `idCallTarget` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=182; -- restrict deletion of importctbatch when calltarget records exist ALTER TABLE importctbatch ADD CONSTRAINT `fk_importctbatch_calltarget_idImportCTBatch` FOREIGN KEY (`idImportCTBatch`) REFERENCES `calltarget` (`idImportCTBatch`) ON DELETE RESTRICT;
我認為你把 FK 弄錯了,真的想要:
ALTER TABLE calltarget ADD CONSTRAINT `fk_importctbatch_calltarget_idImportCTBatch` FOREIGN KEY (`idImportCTBatch`) REFERENCES `importctbatch` (`idImportCTBatch`) ON DELETE RESTRICT;
正如手冊所說,
在引用的表中,必須有一個索引,其中引用的列按相同順序列為第一列
calltarget.idImportCTBatch
不是任何索引的一部分。理想情況下,您希望外鍵引用 PK 或唯一約束。