[英]Adding foreign key Error 150
好的,我知道關於錯誤150的問題很多。
但正如SO所說:“如果這些答案不能完全解決您的問題,請提出一個新問題。” 所以我問一個新問題。
我有兩個表tableA和tableB,兩個引擎都是innoDB
我的查詢alter table tableA add foreign key (url) references tableB(url)
給出Error 1005 (HY000): can't create table myDatabaseName.#sql-3134 e52(error 150)
所以這就是我所做的。
alter tableA drop column url;
alter tableA add column url varchar(100) NOT NULL default "";
alter tableB drop column url;
alter tableB add column url varchar(100) NOT NULL default "";
alter tableB add primary key (url,bName,pID);
alter tableA engine = innodb;
alter tableB engine = innodb;
確認我檢查了SHOW TABLE STATUS
都賦予了相同的innoDB引擎
然后我再次嘗試了相同的查詢,但相同的錯誤。 所以到目前為止的情況
varchar(100) NOT NULL default ""
show create table tableA
給出的內容;
CREATE TABLE `tableA` (
`url` varchar(100) NOT NULL DEFAULT '',
`tNo` int(11) NOT NULL,
`bName` varchar(40) NOT NULL,
`pID` int(11) NOT NULL,
`oprNo` int(11) DEFAULT NULL,
`found` int(11) DEFAULT NULL,
`fix` int(11) DEFAULT NULL,
`fixStatus` varchar(40) DEFAULT NULL,
`fixDate` date DEFAULT NULL,
`releaseStatus` varchar(40) DEFAULT NULL,
`releaseDate` date DEFAULT NULL,
PRIMARY KEY (`url`,`tNo`),
CONSTRAINT `tableA_ibfk_1` FOREIGN KEY (`url`) REFERENCES `tableB` (`url`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
show create table tableB
給出
CREATE TABLE `tableB` (
`url` varchar(100) NOT NULL DEFAULT '',
`bName` varchar(40) NOT NULL,
`pID` int(11) NOT NULL,
PRIMARY KEY (`url`,`bName`,`pID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
更新我能夠使用mysql workbench添加一個外鍵URL,但是其他字段也會出現相同的錯誤
`alter table tableA add foreign key (bName) references tableB(bName)`<br>
`alter table tableA add foreign key (pID) references tableB(pID)`
要創建FK,如下所示:
ALTER TABLE tableA ADD FOREIGN KEY (bName) REFERENCES tableB(bName);
ALTER TABLE tableA ADD FOREIGN KEY (pID) REFERENCES tableB(pID);
您應該在tableB上創建INDEX(bName)
, INDEX(pID)
,如下所示:
mysql> SHOW CREATE TABLE tableB\G
*************************** 1. row ***************************
Table: tableB
Create Table: CREATE TABLE `tableB` (
`url` varchar(100) NOT NULL DEFAULT '',
`bName` varchar(40) NOT NULL,
`pID` int(11) NOT NULL,
PRIMARY KEY (`url`,`bName`,`pID`),
KEY `bName` (`bName`),
KEY `pID` (`pID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> alter table tableA add foreign key (bName) references tableB(bName);
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table tableA add foreign key (pID) references tableB(pID);
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.