Каково ограничение ключа по умолчанию в Mysql или что делает только одно ключевое слово? - PullRequest
1 голос
/ 22 апреля 2019

У меня есть запрос к таблице, который выглядит примерно так:

  create table table_name(
  id int auto_increment,
  ...
  KEY fk_some_name (some_column_name)
  )

Что делает этот «Ключ»?Я думаю, что человек, который написал это, не знал, что он делал.Он назвал это fk_some_name.Я думаю, что он хотел создать внешний ключ.Я искал некоторое время, но не нашел использования ключевого слова Key в одиночку.

Ответы [ 2 ]

2 голосов
/ 22 апреля 2019

В случае, если вы покажете, это просто индекс с именем fk_some_name.

Многие сайты не любят использовать истинные ограничения внешнего ключа, но им все равно может понадобиться индекс для столбца, чтобы помочь оптимизировать объединения для этого столбца. Может быть соглашение об именовании, что индексы, предназначенные для объединений, имеют префикс fk_.

Также в MySQL, если вы определите ограничение внешнего ключа для столбца, у которого уже есть индекс, он будет использовать этот индекс вместо создания нового индекса, который будет избыточным.

KEY и INDEX являются синонимами в MySQL в некоторых контекстах.

Вы можете сделать это:

CREATE TABLE ... ( ... {INDEX|KEY} name (some_column_name) )

Вы можете сделать это:

ALTER TABLE ... ADD {INDEX|KEY} name (some_column_name)

Вы не можете использовать их взаимозаменяемо в некоторых других случаях:

Используйте только КЛЮЧ, а не ИНДЕКС:

CREATE TABLE ... ( ... FOREIGN KEY name (col) REFERENCES ... )

Используйте только ИНДЕКС, а не КЛЮЧ:

CREATE INDEX name ON tablename (column_name)

В случае сомнений прочитайте справочную документацию.

0 голосов
/ 22 апреля 2019

Согласно документации MySQL для create table, KEY является синонимом INDEX.Таким образом, это создает индекс с именем "fk_some_name" для одного столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...