【发布时间】:2020-04-16 20:05:34
【问题描述】:
在文档中给出,当你使用 alter table 命令添加外键时,MySQL 不会为外键创建索引,你需要手动创建它。
https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html
外键可以是自引用的(引用同一个表)。当您使用 ALTER TABLE 向表添加外键约束时,请记住首先创建所需的索引。
但是我使用 alter table 命令在表中添加了一个外键,它正在创建索引和约束。
ALTER TABLE `pharmaceuticals_dosage` ADD CONSTRAINT `pharmaceuticals_dosa_as_needed_reason_cod_2ac978bf_fk_human_api` FOREIGN KEY (`as_needed_reason_code_id`) REFERENCES `human_api_code` (`id`);
我认为MySQL官方文档应该没有错,那么它创建索引的原因是什么?
PS:上面的查询是由Django迁移创建的
【问题讨论】:
-
如果不存在引用字段为前缀的另一个索引,则 MySQL 在子项中添加索引。 MySQL 需要外键和引用键上的索引,以便外键检查可以快速且不需要表扫描。在引用表中,必须有一个索引,其中外键列按相同顺序列为第一列。如果引用表不存在,则自动在引用表上创建这样的索引但它没有在父表中创建索引,即使它是自引用FK。
标签: mysql django django-orm