ความแตกต่างระหว่าง“ คีย์เฉพาะ” และ“ คีย์หลัก”


คำตอบ:


20

ตารางสามารถมีมากที่สุดคนหนึ่งPRIMARY KEYข้อ จำกัด แต่ก็สามารถมีมากเท่าที่คุณต้องการUNIQUE KEYจำกัด

คอลัมน์ที่เป็นส่วนหนึ่งของการต้องได้รับการกำหนดให้เป็นPRIMARY KEY NOT NULLไม่จำเป็นสำหรับคอลัมน์ที่เป็นส่วนหนึ่งของUNIQUE KEYข้อ จำกัด หากคอลัมน์ไม่เป็นโมฆะแสดงว่าไม่มีความแตกต่างระหว่างคีย์เฉพาะและคีย์หลัก

ข้อแตกต่างเล็กน้อยอีกอย่างคือคุณสามารถเลือกชื่อที่คุณต้องการสำหรับUNIQUE KEYข้อ จำกัด (และดัชนี) ในทางกลับกันPRIMARY KEYมีชื่อเริ่มต้น: PRIMARY.


5

ความแตกต่างที่สำคัญอย่างหนึ่ง

  • คีย์หลักไม่อนุญาตให้คอลัมน์ที่ไม่มีค่า
  • กุญแจที่ไม่ซ้ำกันช่วยให้คอลัมน์ nullable

ไม่อย่างนั้นมีความแตกต่างไม่มาก ...


4

สิ่งที่คนอื่นไม่ได้ชี้:

  • หากคุณไม่ได้ประกาศ PK อย่างชัดเจนในตาราง InnoDB จะสร้างขึ้นภายใต้การคุ้มครองสำหรับคุณ คุณไม่สามารถเข้าถึงสั่งซื้อหรือกรองโดยใช้คีย์นี้ สิ่งนี้มีการแยกสาขาในแง่ของทรัพยากรเนื่องจากแต่ละดัชนีรองประกอบด้วยตัวชี้การคัดลอกไปยัง PK ของแถว

3

ความแตกต่างที่สำคัญที่สุดคือพวกเขาในวัตถุประสงค์

  • คีย์หลัก : วัตถุประสงค์ของคีย์หลักคือการทำหน้าที่เป็น "คีย์" คีย์หลักคือคีย์ในฐานข้อมูลเชิงสัมพันธ์ที่ใช้ในการระบุระเบียน
  • ดัชนีที่ไม่ซ้ำ : ดัชนีที่ไม่ซ้ำกันเป็น“ ดัชนี” ไว้สำหรับประสิทธิภาพ เครื่องมือเพิ่มประสิทธิภาพรู้ว่าสำหรับเงื่อนไข "โดยที่ x =: x" จะมีเพียงหนึ่งระเบียนที่เป็นผลลัพธ์ - ดังนั้นจึงสามารถจัดทำแผนที่เหมาะสมสำหรับสิ่งนั้น
  • ข้อ จำกัด ที่ไม่ซ้ำกัน : มันเป็น“ ข้อ จำกัด ” ซึ่งทำให้แน่ใจว่าไม่มีค่าที่ซ้ำกันในคอลัมน์นั้น มันเป็นข้อ จำกัด สำหรับความสมบูรณ์ของข้อมูล

นอกเหนือจากวัตถุประสงค์แล้วประเด็นต่อไปนี้เป็นสิ่งสำคัญ

  • เว้นแต่จะมีการระบุคีย์หลักเป็นอย่างอื่นจะพยายามสร้าง CLUSTERED INDEX (ประเด็นนี้เกี่ยวกับ SQL Server แม้ว่าตามที่ระบุไว้ในความคิดเห็น)
  • สามารถมีคีย์หลักได้เพียงหนึ่งรายการต่อหนึ่งตาราง แต่อาจมีข้อ จำกัด และดัชนีที่ไม่ซ้ำกันมากมาย
  • Primary KEY ไม่ใช่ค่าว่างเสมอ แต่คอลัมน์ที่มีข้อ จำกัด เฉพาะสามารถเก็บค่า NULL ได้

1
คำถามถูกติดแท็ก MySQL คุณไม่สามารถระบุเป็นอย่างอื่นได้หากตารางใช้เอ็นจิ้น InnoDB และมีคีย์หลักดังนั้นนี่คือดัชนีคลัสเตอร์ ไม่มีทางเลือก. บางทีคุณอาจคิดถึง SQL Server
ypercubeᵀᴹ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.