คำหลัก 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
เอียง

คำตอบ:


190

ข้อความจากhttp://dev.mysql.com/doc/refman/5.1/en/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 สัญกรณ์ {|} อธิบายคำพ้องความหมายเสมอไม่เพียง แต่ในกรณีนี้
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
ไม่มีใครเคยอธิบายสิ่งที่การใช้คำหลักนั้นถ้ามันล้าสมัยหรือไม่ หากฉันมีคีย์หลักแล้วทำไมต้องมี "คีย์" ด้วย จุดสองดัชนีคืออะไร? ได้โปรดให้ความกระจ่างแก่ฉันฉันไม่พบสิ่งใดเกี่ยวกับเรื่องนี้
Barbz_YHOOL

36

KEYINDEXเป็นปกติไวพจน์สำหรับ แอ็ตทริบิวต์คีย์PRIMARY KEYยังสามารถระบุได้เช่นเดียวกับที่KEYกำหนดในนิยามคอลัมน์ สิ่งนี้ถูกนำไปใช้เพื่อความเข้ากันได้กับระบบฐานข้อมูลอื่น ๆ

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.