2010-09-16 106 views
3

我想將外鍵添加到我的表中,但收到此錯誤。 錯誤代碼:1005無法創建表'william。#sql-88c_3'(errno:150) 我有3個表。員工,客戶和合同。MySQL錯誤代碼:1005

僱工[employee_no PK],客戶端[CUSTOMER_NO PK]合同[contract_no PK] 我想有合同外鍵合同[contract_no PK,employee_no FK],CUSTOMER_NO FK]

我試着做直接失敗,我現在正在嘗試alter語句。Alter腳本有什麼問題嗎?

ALTER TABLE contract 
    ADD CONSTRAINT `employee_no_fk2` FOREIGN KEY (`employee_no`) REFERENCES `employee` 
    (`employee_no`); 


    ALTER TABLE contract 
    ADD CONSTRAINT `Customer_no_fk2` FOREIGN KEY (`Customer_no`) REFERENCES `client` 
    (`Customer_no`); 

回答

10

大多數這樣的錯誤,會涉及到數據類型小姐比賽左右。如果你可以去通過這些鏈接..它可能會幫助你,我想.. Check-this ......也Check-this

當他們在第二個環節說:

你應該看的第一個地方是數據類型是否一致外鍵和主鍵列之間 。

mysql> SHOW engine innodb STATUS; 

------------------------ 
LATEST FOREIGN KEY ERROR 
------------------------ 
100130 17:16:57 Error IN FOREIGN KEY CONSTRAINT OF TABLE sampledb/#sql-4a0_2: 
FOREIGN KEY(member_type) 
REFERENCES common_lookup(common_lookup_id): 
Cannot find an INDEX IN the referenced TABLE WHERE the 
referenced COLUMNS appear AS the FIRST COLUMNS, OR COLUMN types 
IN the TABLE AND the referenced TABLE do NOT MATCH FOR CONSTRAINT. 
+1

第二個鏈接非常有幫助。我試圖添加一個外鍵與刪除設置null,但我的目標列沒有null約束,這是給我這個問題。我可以通過'SHOW引擎innodb STATUS;'命令找出問題。 – 2013-07-29 08:40:50

+1

第二鏈接ftw!我按照他的描述:「我遇到的最常見的變化是主鍵列使用int無符號數據類型,而外鍵列使用int數據類型,InnoDB Engine停止這個當然,你可以通過改變外鍵數據類型來修改它以匹配int無符號數據類型。「 – 2014-02-04 00:43:25

2

確保您試圖引用沒有索引和/或不是主鍵的鍵字段之一。並且兩個關鍵字段類型和/或大小應該完全匹配,並且確保這兩個表都是InnoDB表。

0

上次我遇到了這一點,這是約束:引用的表密鑰類型是「廉政」並參照表有「無符號整型」,指而不是int。