在MySQL中,有時我們會遇到不能建立外鍵的情況。這是因為MySQL要求建立外鍵必須滿足一些限制條件,否則就會遇到問題。
第一個限制條件是表必須使用InnoDB存儲引擎。因為只有InnoDB支持外鍵,如果表使用了其他存儲引擎,那么就無法建立外鍵。
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
上面這個例子中,表的存儲引擎是MyISAM,所以無法建立外鍵。
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
而這個例子中,表的存儲引擎是InnoDB,因此可以建立外鍵。
第二個限制條件是外鍵字段必須建立索引。如果沒有為外鍵字段建立索引,那么就無法建立外鍵。
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `age` int(11) NOT NULL, `department_id` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在上面這個例子中,雖然department_id字段是外鍵,但沒有建立索引,因此無法建立外鍵。要建立索引,可以使用以下命令:
ALTER TABLE `user` ADD INDEX `department_id_index` (`department_id`);
建立完索引后,再建立外鍵就可以了:
ALTER TABLE `user` ADD CONSTRAINT `department_fk` FOREIGN KEY (`department_id`) REFERENCES `department`(`id`);
在使用MySQL時,如果遇到不能建立外鍵的情況,可以根據上面的兩個限制條件進行排查,找到原因后再進行修改。