1. 程式人生 > >MYSQL mysql 無法建立外來鍵約束 及 errno: 121錯誤

MYSQL mysql 無法建立外來鍵約束 及 errno: 121錯誤

對mysql資料庫不太熟悉,今天遇到了外來鍵建立問題。alter外來鍵建立語句命令列下提示成功了,但就是沒看到外來鍵。

後來改用workbench工具來建立,發現是因為資料預設是採用的MyISAM儲存引擎,該引擎不支援外來鍵,需要修改引擎為InnoDB才可以。

我直接在workbench將表的引擎改為了InnoDB,發現還是不行,報1005錯誤:

[sql] view plaincopyprint?
  1. 10:31:56    ALTERTABLE `cm_relation_contact_group`     ADDCONSTRAINT `fk_test`    FOREIGNKEY (`groupId` )    
    REFERENCES `cm_group` (`id` )    ONDELETENOACTIONONUPDATENOACTION  , ADDINDEX `fk_test` (`groupId` ASC)  Error Code: 1005. Can't create table 'callcenter.#sql-728_5c92' (errno: 150)  
10:31:56	ALTER TABLE `cm_relation_contact_group`     ADD CONSTRAINT `fk_test`    FOREIGN KEY (`groupId` )    REFERENCES `cm_group` (`id` )    ON DELETE NO ACTION    ON UPDATE NO ACTION  , ADD INDEX `fk_test` (`groupId` ASC)	Error Code: 1005. Can't create table 'callcenter.#sql-728_5c92' (errno: 150)

上網google了一把,大家總結了下,大致有以下原因:

1、外來鍵的引用型別不一樣,主鍵是int外來鍵是char 
2、找不到主表中 引用的列 
3、主鍵和外來鍵的字元編碼不一致 
4.還有要建立外來鍵的話,要先建立索引。沒有建立索引也會出錯。
 

我逐個檢查了下,都沒問題。難道是每個表都有引擎設定,開啟被引用表,發現引擎還是MyISAM,修改過來後就OK了。

我在MYSQL中建立個表,就能報[Err] 1005 - Can't create table '.\qesplatform_dbdldx\p_users.frm' (errno: 121),沒有外來鍵,請問如何解決
(errno: 121), 這是外關鍵字名字重複的錯誤,即使是在不同的表中,外關鍵字的名字也不能重複
我的是FK_Reference_4 重複了,找個沒有的FK_Reference_54 就可以了