同一表中引用的索引

时间:2015-02-27 13:54:54

标签: mysql indexing

我有一张桌子:

CREATE TABLE person (
person_id INTEGER NOT NULL,
parent_person_id INTEGER REFERENCES person(person_id),
CONSTRAINT PK_person_id PRIMARY KEY (person_id)
);

是否需要在parent_person_id列上创建索引或者是否自动创建?

2 个答案:

答案 0 :(得分:1)

您无需在parent_person_id上创建索引。引用列上需要索引,而不是引用列。

另外,请注意创建同桌关系存在一些限制。在MySQL网站上,在foreign-key relationships部分,它读取“如果ON UPDATE CASCADE或ON UPDATE SET NULL递归更新它在级联期间先前更新的同一个表,它就像RESTRICT一样。

这意味着您无法使用自引用ON UPDATE CASCADEON UPDATE SET NULL操作。这是为了防止级联更新导致的无限循环。“

这是MySQL的已知限制,您应该注意防止明显无意义的错误。

答案 1 :(得分:0)

仅在InnoDB中自动索引外键。在引用表中,必须有一列 其中外键列以相同顺序列为第一列。 如果索引不存在,则会自动在引用表上创建这样的索引。