2017-06-24 154 views
-2

我發現此線程類似於我的查詢 How to Link Foreign Key with Different Name 但不幸的是,與答案,我的問題沒有得到解決。就我的表格示例而言,它不會創建任何主鍵。所有外鍵只。MySQL使用相同的外鍵爲兩個不同的表列

下面是代碼:

CREATE TABLE ref_data(
user_id INT(11) NOT NULL, 
ref_id INT(11) NOT NULL, 
ref_name VARCHAR(30) NOT NULL, 
ref_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, 
CONSTRAINT FK_user_id FOREIGN KEY(user_id) REFERENCES client (user_id), 
CONSTRAINT FK_ref_id FOREIGN KEY(ref_id) REFERENCES client (user_id), 
CONSTRAINT FK_ref_name FOREIGN KEY(ref_name) REFERENCES client (firstname) 
); 

它給我:

錯誤號:150 「外鍵約束的格式不正確」

這裏我使用USER_ID兩次第一個爲「user_id」,第二個爲「ref_id」。還使用firstname作爲「ref_name」。

客戶表:

CREATE TABLE client (
    `user_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    `username` VARCHAR(30) NOT NULL UNIQUE KEY, 
    `email` VARCHAR(50) NOT NULL UNIQUE KEY, 
    `firstname` VARCHAR(30) NOT NULL, 
    `lastname` VARCHAR(30) NOT NULL, 
    `password` CHAR(128) NOT NULL 
); 
+0

您可以在得到該錯誤之後運行'SHOW ENGINE InnoDB STATUS'獲取更多信息。 –

+0

我運行它顯示如下: ===================================== 2017-07- 13 ... – mimi

+0

可以肯定的是,在外鍵錯誤之後立即檢查了它? –

回答

2

好吧,試圖創建ref_data表時,外鍵錯誤之後,我看到:

國外最新KEY ERROR

- ---------------------- 2017-07-13 01:07:00 37ec表ref_data的外鍵約束出錯:

外鍵(ref_name)參考客戶(姓)):

找不到在 引用表在表中的索引,其中引用的列顯示爲第一個 列或列類型和引用表不 匹配約束。請注意,ENUM和 SET的內部存儲類型在使用> = InnoDB-4.1.12創建的表中進行了更改,舊錶中的這樣的列 不能被新表中的這些列引用。有關正確的外鍵定義,請參閱 http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html 。創建表'testref_data' 與外鍵約束失敗。 被引用表中沒有索引,其中引用的列出現在'FOREIGN KEY(ref_name)REFERENCES client(firstname)'''附近的第一個 列'''。

什麼的錯誤基本上是說:(以粗體顯示)

沒有爲「客戶」表(的參考一節後的部分上「姓」沒有索引FOREIGN KEY

但它是一個簡單的修補程序運行此SQL的客戶表:

ALTER TABLE `client` ADD INDEX(`firstname`); 

...然後再次運行ref_data表SQL。

+0

它剛剛工作!非常感謝你爲我教授新課程。 – mimi

相關問題