Apa arti kata kunci KUNCI?

141

Dalam definisi tabel MySQL ini:

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)
);

Apa arti KEYkata kunci? Itu bukan kunci utama, itu bukan kunci asing, jadi apakah itu hanya indeks? Jika demikian, apa yang istimewa dari jenis indeks yang dibuat dengan ini KEY?

w5m
sumber
1
Tampaknya seolah-olah operator "KEY" tidak lagi digunakan di MySQL Server 5.5. Tidak yakin kapan itu dihapus, tetapi masalah yang saya alami dengan itu ada pada 5.1, tetapi tidak 5.5.
Miring

Jawaban:

190

Mengutip dari http://dev.mysql.com/doc/refman/5.1/en/create-table.html

{INDEX|KEY}

Begitu KEYjuga INDEX;)

MartinodF
sumber
9
Notasi {INDEX | KEY} secara umum tidak berarti bahwa INDEX dan KEY memiliki arti yang sama, atau KEY adalah INDEX;)
sergtk
1
@ergtk: Sesuai dengan notasi dalam manual MySQL, FOO | BAR berarti bahwa kata kunci FOO atau kata kunci BAR dapat digunakan. Id est, mereka adalah sinonim.
dotancohen
4
Persis! Manual MySql mengklarifikasi bahwa INDEX dan KEY adalah sinonim - inilah mengapa saya menaikkan jawaban. Tetapi dapat disimpulkan dari jawaban bahwa Notasi BNF {|} selalu menggambarkan sinonim, tidak hanya dalam kasus ini.
sergtk
3
Ini tidak benar. Saya menemukan jawaban terbaik di Quora (lihat pengguna Kristian Kohntopp) quora.com/... : KEY adalah kendala, INDEX adalah struktur data yang diperlukan untuk mengimplementasikan kendala itu. Dalam praktiknya, jika Anda memiliki FK misalnya KEY key_name (user_id), CONSTRAINT foreign_key_constraint_name FOREIGN KEY (user_id) REFERENCES auth_user (id)maka Anda mungkin juga ingin menentukan INDEX apa yang digunakan (HASH vs BTREE). Contoh ini menunjukkan KEY dan INDEX bukan sinonim.
oneloop
4
Tidak ada yang pernah menjelaskan apa gunanya kata kunci itu, apakah itu usang atau tidak. Jika saya memiliki kunci utama, lalu mengapa memiliki "kunci" juga? apa gunanya dua indeks?
tolong terangkan
36

KEYbiasanya merupakan sinonim untuk INDEX. Atribut kunci PRIMARY KEYjuga dapat ditentukan hanya KEYketika diberikan dalam definisi kolom. Ini diimplementasikan untuk kompatibilitas dengan sistem database lain.

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

Ref: http://dev.mysql.com/doc/refman/5.1/en/create-table.html

sergtk
sumber