Answers:
是的,但仅限于 创意数据库。Innodb是当前唯一实现外键的表格式。
显然,索引是根据robert发布的链接中的指定自动创建的。
InnoDB要求在外键和引用键上建立索引,以便外键检查可以快速进行,而无需进行表扫描。在引用表中,必须有一个索引,其中外键列以相同的顺序列为第一列。如果这样的索引不存在,则会在引用表上自动创建。(这与某些旧版本相反,在旧版本中,必须显式创建索引,否则将无法创建外键约束。)如前所述,如果使用index_name,则使用它。
InnoDB permits a foreign key to reference any index column or group of columns. However, in the referenced table, there must be an index where the referenced columns are the first columns in the same order.
是的,请参阅InnoDB和FOREIGN KEY约束。
如果您执行ALTER TABLE(而不是CREATE TABLE),则至少根据文档不会自动获得索引(链接用于5.1,但对于5.5相同):
[...]使用ALTER TABLE将外键约束添加到表时,请记住首先创建所需的索引。
如前所述,它适用于InnoDB。起初,我以为很多其他功能(尤其是MS SQL和DB2)没有提供功能很奇怪。仅当表行很少时,TableSpace扫描才比索引扫描好-因此,在大多数情况下,希望对外键进行索引。然后这让我感到震惊-这不一定意味着它必须是独立的(一列)索引-它在MySQL的自动FK索引中。因此,可能是MS SQL,DB2(我不确定Oracle)等将其留给DBA的原因;大型表上的所有多个索引都可能导致性能和空间问题。
是的,Innodb
提供这个。您可以在FOREIGN KEY
子句后放置一个外键名称,也可以保留它以让MySQL为您创建一个名称。MySQL自动使用foreign_key_name
名称创建索引。
CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name (columns)
REFERENCES parent_table(columns)
ON DELETE action
ON UPDATE action
无法自动使用索引键
ALTER TABLE (NAME OF THE TABLE) ADD INDEX (FOREIGN KEY)
您创建的表的名称,例如照片,以及FOREIGN KEY photograph_id
。代码应该是这样的
ALTER TABLE photographs ADD INDEX (photograph_id);