Що означає ключове слово KEY?


141

У цьому визначенні таблиці MySQL:

CREATE TABLE groups (
  ug_main_grp_id smallint NOT NULL default '0',
  ug_uid smallint  default NULL,
  ug_grp_id smallint  default NULL,
  KEY (ug_main_grp_id)
);

Що означає KEYключове слово? Це не первинний ключ, це не зовнішній ключ, так це просто індекс? Якщо так, то що такого особливого в цьому типі індексу, створеного KEY?


1
Схоже, оператор "KEY" більше не використовується в MySQL Server 5.5. Не впевнений, коли він був видалений, але проблема, з якою я маю його, присутня в 5.1, але не 5.5.
косий

Дивіться також stackoverflow.com/questions/1401572/…
Ів М.

Відповіді:


190

Цитування з http://dev.mysql.com/doc/refman/5.1/uk/create-table.html

{INDEX|KEY}

Так KEYі є INDEX;)


9
Позначення {INDEX | KEY} взагалі не означає, що INDEX та KEY мають однакове значення, або KEY - INDEX;)
sergtk

1
@sergtk: Відповідно до позначень у посібнику по MySQL, FOO | BAR означає, що можна використовувати або ключове слово FOO, або ключове слово BAR. Щоправда, вони є синонімами.
dotancohen

4
Саме так! Посібник MySql пояснює, що INDEX та KEY є синонімами - ось чому я підтримав відповідь. Але можна зробити висновок, що BNF Notation {|} описує синоніми завжди, не тільки в цьому випадку.
sergtk

3
Це неправильно. Я знайшов найкращу відповідь у Quora (див. Користувача Kristian Kohntopp) quora.com/… : KEY - це обмеження, INDEX - це структура даних, необхідна для реалізації цього обмеження. На практиці, якщо у вас є FK, наприклад, KEY key_name (user_id), CONSTRAINT foreign_key_constraint_name FOREIGN KEY (user_id) REFERENCES auth_user (id)ви можете додатково вказати, що використовується INDEX (HASH vs BTREE). Цей приклад показує, що KEY та INDEX не є синонімами.
oneloop

4
Ніхто ніколи не пояснював, у чому полягає використання цього ключового слова, застаріле воно чи ні. Якщо у мене є первинний ключ, то навіщо також мати "ключ"? яка точка двох індексів? plz просвіти мене, я нічого про це не можу знайти
Barbz_YHOOL

36

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

column_definition:
      data_type [NOT NULL | NULL] [DEFAULT default_value]
      [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
      ...

Посилання: http://dev.mysql.com/doc/refman/5.1/en/create-table.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.