我知道对于每个外键,我们应该在其列上建立一个索引,但是当该列位于 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提交功能请求。