2012-03-06 2 views
1

У меня есть следующая таблица, которая претворяет внешний ключ 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 без каких-либо других?

ответ

5

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

Из MySQL CREATE TABLE docs:

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

3

Как объяснено в §12.1.14 "CREATE TABLE Syntax" of the Reference Manual:

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

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

Смежные вопросы