Терминология MySQL “ограничения” по сравнению с различием “во внешних ключах”?

Я смотрю на документы MySQL здесь и пытаюсь разобраться в различии между ВНЕШНИМИ КЛЮЧАМИ и ОГРАНИЧЕНИЯМИ. Я думал, что FK был ограничением, но документы, кажется, говорят о них как, они - отдельные вещи.

Синтаксис для создания FK (частично)...

[CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)

Таким образом, "ОГРАНИЧИТЕЛЬНЫЙ" пункт является дополнительным. Почему Вы включали бы его или не включали бы его? При пропуске его, MySQL создает внешний ключ, но не ограничение? Или это больше похож на "ОГРАНИЧЕНИЕ", не что иное как имя Вас FK, поэтому если Вы не определяете его, Вы получаете анонимный FK?

Любое разъяснение значительно ценилось бы.

Спасибо,

Ethan

45
задан 21 November 2008 в 23:42
поделиться

1 ответ

Это, вероятно, самый запутанный topìc в MySQL.

Многие люди говорят, что, например, «ПЕРВИЧНЫЙ КЛЮЧ», «ВНЕШНИЙ КЛЮЧ» и «УНИКАЛЬНЫЙ» ключ на самом деле являются индексами! (Официальная документация MySQL включена здесь)

Многие другие, с другой стороны, говорят, что они скорее ограничения (что имеет смысл, потому что, когда вы их используете, вы действительно накладываете ограничения на затронутые столбцы).

Если они действительно являются индексами, то какой смысл использовать ограничение clausule, чтобы дать ему имя, поскольку вы должны иметь возможность использовать имя этого индекса при его создании?

Пример:

... index_name С ИНОСТРАННЫМ КЛЮЧОМ (col_name1, col_name2, ...)

Если FOREIGN KEY является индексом, то мы должны иметь возможность использовать index_name для его обработки. Однако мы не можем.

Но если это не индексы, а фактические контраинта, которые используют индексы для работы, то это имеет смысл.

Во всяком случае, мы не знаем. На самом деле, никто, кажется, не знает.

0
ответ дан 26 November 2019 в 21:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: