Что такое «ключ» без ограничения внешнего ключа? - PullRequest
1 голос
/ 06 марта 2012

У меня есть следующая таблица, которая применяет внешний ключ для vendor_id:

CREATE TABLE `notes` (
  `vendor_id` varchar(20) NOT NULL DEFAULT '',
  KEY `vendor_id` (`vendor_id`),
  CONSTRAINT `notes_ibfk_1` FOREIGN KEY (`vendor_id`) REFERENCES `title` (`vendor_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Я просматривал чужой стол, и он имел KEY, но не показывал CONSTRAINT, как показано ниже:

CREATE TABLE `notes` (
  `vendor_id` varchar(20) NOT NULL DEFAULT '',
  KEY `vendor_id` (`vendor_id`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Что именно означает / делает KEY без чего-либо еще?

Ответы [ 2 ]

5 голосов
/ 06 марта 2012

KEY является синонимом INDEX, поэтому в этом случае для vendor_id был создан индекс, но он не был специально определен как PRIMARY KEY таблицы, что обеспечило бы уникальность.

Из MySQL CREATE TABLE документов :

KEY обычно является синонимом INDEX.Атрибут ключа PRIMARY KEY также может быть указан как просто KEY, если он задан в определении столбца.Это было реализовано для совместимости с другими системами баз данных.

3 голосов
/ 06 марта 2012

Как объяснено в §12.1.14 «CREATE TABLE Синтаксис» Справочного руководства :

KEY обычно является синонимом INDEX.Атрибут ключа PRIMARY KEY также может быть указан как KEY, если он задан в определении столбца.Это было реализовано для совместимости с другими системами баз данных.

(Первое предложение - это то, что применимо в вашем случае; так что это просто создание индекса с именем vendor_id для notes.vendor_id.)

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