2011-03-15 60 views
0

我有兩個表:tab1,tab2錯誤添加外鍵

我想添加一個外鍵TAB2,寫此查詢

ALTER TABLE tab2 
ADD FOREIGN KEY(name) REFERENCES tab1(name) 

但我得到這個錯誤:

error 1005(HY000):can't create table 'club.#sql-6f0_2' (errno:150) 

哪裏不對?

Edit 

i write this tables only for test. 

tab1 

name char(20) private key 

lname char(20) 


tab2 

ssn int private key 

name char(20) 
+0

您使用的是什麼數據庫管理系統(DBMS)?此外,請告訴我們表結構是什麼: 'show create table tab1;' 'show create table tab2;' – 2011-03-15 21:28:15

回答

4

我在您的其他問題評論回答了這個給你一個小時前,但這裏要再次重申:

您可以通過運行SHOW ENGINE INNODB STATUS\G和讀取LATEST FOREIGN KEY ERROR部分得到該錯誤的詳細信息。

這種故障的最可能的原因:

  • tab1.name和tab2.name是不完全一樣的數據類型
  • tab1.name不是唯一
+0

+1:1005/150錯誤也記錄在案:http://dev.mysql.com /doc/refman/5.5/en/innodb-foreign-key-constraints.html – 2011-03-15 21:39:17

0

試試這個:

alter table tab2 
add foreign key my_key(name) references tab1(name) 

也許你的鑰匙應該有一個名字?

+0

不,它沒有工作。 – 2011-03-15 22:03:36

0

您不能在默認MySQL存儲引擎(ISAM,MyISAM)上定義外鍵,使用InnoDB作爲引擎,然後添加外鍵約束。

+2

錯誤意味着這兩個表都是InnoDB。 MyISAM不會因爲錯誤而失敗,它會讓ALTER TABLE完成並且默默無聞,因爲它沒有外鍵。 – 2011-03-15 21:36:53