Mysql

防止 MySQL Workbench 為外鍵約束添加索引,當它是主要的第一部分時

  • June 28, 2013

我知道對於每個外鍵,我們應該在其列上建立一個索引,但是當該列位於 PRIMARY 索引的第一部分時,就沒有必要了。

MySQL 接受這個查詢:

CREATE TABLE IF NOT EXISTS `poll_option_i18ns` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `poll_option_id` int(11) NOT NULL,
 `lang` char(2) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
 `title` varchar(127) COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY (`poll_option_id`,`lang`),
 KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

ALTER TABLE `poll_option_i18ns`
 ADD CONSTRAINT `poll_option_id` FOREIGN KEY (`poll_option_id`) REFERENCES `poll_options` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;

但是在 MySQL 工作台中,我無法在沒有索引的情況下添加外鍵!這是 MySQL Workbench 錯誤還是我做錯了?

這是目前 MySQL Workbench 的一個限制,最近已經在 Stackoverflow 上提到過(現在找不到問題,抱歉)。MySQL Workbench 不使用外鍵使用在該表中啟動 PK 的列的特殊情況。如果您認為值得實施,請在http://bugs.mysql.com送出功能請求。

引用自:https://dba.stackexchange.com/questions/45424