對mysql數據庫不太熟悉,今天遇到了外鍵創建問題。alter外鍵創建語句命令行下提示成功了,但就是沒看到外鍵。
後來改用workbench工具來創建,發現是因爲數據默認是採用的MyISAM存儲引擎,該引擎不支持外鍵,需要修改引擎爲InnoDB纔可以。
我直接在workbench將表的引擎改爲了InnoDB,發現還是不行,報1005錯誤:
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了。
感覺比oracle、sqlserver複雜啊,不知道這樣有什麼好的好處,看來得好好學習下mysql了。