2012-03-21 55 views
1

我有一個表,看起來像這樣:MySQL的errror:150

CREATE TABLE `countrytable` (
    `countryCode` varchar(2) NOT NULL DEFAULT '', 
    `currencyCode` varchar(3) NOT NULL, 
    `currencySymbol` varchar(4) NOT NULL DEFAULT '', 
    `currencyIsRight` tinyint(4) DEFAULT '0', 
    `currencyName` varchar(45) DEFAULT 'US Dollar', 
    `countryName` varchar(50) DEFAULT NULL, 
    PRIMARY KEY (`countryCode`,`currencyCode`), 
    UNIQUE KEY `countryCode_UNIQUE` (`countryCode`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

我試圖創建另一個表,這對countrytable.currencyCode的外鍵。我不斷收到以下錯誤:

The specified relation was unable to be created. 
MySQL said: Can't create table 'noteitdb.#sql-b8_13' (errno: 150) 

兩列的數據類型完全匹配。我可能會錯過什麼?

+0

請參見右側欄,「相關」標題下的其他問題。 – Dev 2012-03-21 08:31:22

+1

countrytable.currencyCode不是唯一的 – Devart 2012-03-21 08:32:50

+0

是的,它不是唯一的,但是我在'countryCode','currencyCode'對上定義了一個PK。定義FK是否意味着被引用的列是唯一的?它不能是一組有效值嗎? – 2012-03-21 08:55:50

回答

1
ALTER TABLE `countrytable` 
    DROP PRIMARY KEY, 
    ADD PRIMARY KEY (`currencyCode`, `countryCode`); 

currencyCode應先索引。請參閱MySQL docs

如果你想有引用 CurrencyCode一個外鍵約束
+0

工作!謝謝一堆。我仍然需要了解訂單的重要性。 – 2012-03-21 09:00:38

+0

這不是一個好的解決方案。您只需在'currencyCode'上使用UNIQUE鍵,而不是複合鍵。 – 2012-03-21 09:29:56

1

,那麼你就需要在此列UNIQUE(或主鍵)約束在這個表:

ALTER TABLE countrytable 
    ADD UNIQUE KEY (currencyCode); 
0

從PK列刪除unsigned

+1

雖然這不是解決方案。在創建外鍵前,我遇到了需要匹配兩個INT字段的有符號/無符號的問題。 – 2014-10-10 20:53:20

+0

有幫助的答案。我也有簽署/無簽名之間的不匹配。謝謝。 – Federico 2016-01-31 17:33:43