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


252

ฉันใช้ฐานข้อมูล MySQL ฉันมีความสับสนระหว่างคีย์หลักและคีย์เฉพาะ

โปรดช่วยฉันในที่ที่ฉันควรสร้างคีย์หลักและคีย์เฉพาะ ฉันหมายถึงสถานการณ์ที่เราสร้างคีย์เฉพาะหรือคีย์หลัก


9
ความสามารถในการเป็นโมฆะ wrt เป็นวิธีที่ดีในการแยก b / w พวกเขาคือ PRIMARY KEY = UNIQUE KEY + Not Null CONSTRAINT
KNU

ลองดูที่dba.stackexchange.com/questions/15572/... และstackoverflow.com/questions/1401572/…
LCJ

คำตอบ:


233

คีย์หลัก:

  • สามารถมีได้หนึ่งคีย์หลักในตารางเท่านั้น
  • ในบาง DBMS ไม่สามารถทำได้NULL- เช่น MySQL เพิ่มNOT NULL
  • คีย์หลักเป็นตัวระบุคีย์ที่ไม่ซ้ำกันของระเบียน

รหัสเฉพาะ:

  • สามารถมีคีย์เฉพาะได้มากกว่าหนึ่งคีย์ในหนึ่งตาราง
  • รหัสที่ไม่ซ้ำสามารถมีNULLค่าได้
  • มันอาจเป็นรหัสผู้สมัคร
  • รหัสที่ไม่ซ้ำสามารถเป็นได้NULL; หลายแถวสามารถมีNULLค่าได้และอาจไม่ถือว่าเป็น "ที่ไม่ซ้ำกัน"

11
นอกจากนี้ต้องการเพิ่มในคีย์หลักนั้นสามารถสร้างในหลายคอลัมน์เช่นคีย์หลัก (CustomerID, ProductID) สิ่งนี้เรียกว่าคีย์หลักผสม นี่คือการชี้แจงจุดแรกตามที่อาจจะเป็นตามที่มันเป็น (อ่านหนึ่งคีย์ => หนึ่งคอลัมน์) โดยผู้มาใหม่เพื่อ sql:)
เคน

1
คุณหมายถึง 'สามารถเป็นคีย์ตัวเลือก' ได้อย่างไร

1
"อนุญาตให้มีเพียง null เดียวเท่านั้น" - นี่ไม่เป็นความจริงอย่างน้อยก็ไม่ใช่สำหรับ MySQL
Jānis Elmeris

69
ที่สำคัญไม่ซ้ำกันสามารถโมฆะและอาจจะไม่ซ้ำกันหมายถึง ??
Pratik

20
@PratikCJoshi เขาอาจหมายความว่าสามารถมีหลายแถวด้วย null บนคีย์ที่ไม่ซ้ำกัน
จอห์น

77

คีย์ที่ไม่ซ้ำ (สหราชอาณาจักร) : เป็นคอลัมน์หรือกลุ่มของคอลัมน์ที่สามารถระบุเอกลักษณ์ในแถว

คีย์หลัก (PK) : นอกจากนี้ยังเป็นคอลัมน์หรือกลุ่มของคอลัมน์ที่สามารถระบุเอกลักษณ์ในแถว

ดังนั้นคีย์หลักเป็นเพียงชื่ออื่นสำหรับคีย์เฉพาะ แต่การใช้งานเริ่มต้นใน SQL Server นั้นแตกต่างกันสำหรับคีย์หลักและคีย์ที่ไม่ซ้ำกัน

โดยค่าเริ่มต้น:

  1. PK สร้างดัชนีแบบกลุ่มและสหราชอาณาจักรสร้างดัชนีแบบไม่รวมกลุ่ม
  2. PK ไม่ใช่ null แต่ UK อนุญาตให้มี null ได้ (หมายเหตุ: ตามค่าเริ่มต้น)
  3. มีได้เพียงหนึ่งเดียวและหนึ่ง PK บนโต๊ะ แต่อาจมีหลายสหราชอาณาจักร
  4. คุณสามารถแทนที่การใช้งานเริ่มต้นขึ้นอยู่กับความต้องการของคุณ

มันขึ้นอยู่กับเป้าหมายของคุณเมื่อตัดสินใจว่าจะสร้างสหราชอาณาจักรหรือ PK มันเป็นไปตามการเปรียบเทียบเช่น "หากมีทีมสามคนดังนั้นพวกเขาทั้งหมดเป็นเพื่อน แต่จะมีหนึ่งในพวกเขาที่จะเป็นคู่หู: PK และสหราชอาณาจักรมีความสัมพันธ์คล้ายกัน" ฉันขอแนะนำให้อ่านบทความนี้: ตัวอย่างที่ผู้เขียนอาจดูไม่เหมาะสม แต่พยายามเข้าใจแนวคิดโดยรวม

http://tsqltips.blogspot.com/2012/06/difference-between-unique-key-and.html


อ่านหน้าเว็บประมาณ 10 หน้าซึ่งบอกว่า PK สามารถมีได้มากกว่าหนึ่งคอลัมน์ ถ้าอย่างนั้นจะมีเพียงหนึ่ง PK บนโต๊ะได้อย่างไร?

@android A PK ที่มีมากกว่าหนึ่งคอลัมน์ทำหน้าที่เป็นคอลัมน์เดียวที่เกี่ยวข้องกับเอกลักษณ์ อย่างน้อยใน PostgreSQL หมายความว่ามีการเพิ่มคอลัมน์ใหม่ (ที่มีชื่อเริ่มต้น[table_name]_pkey) ลงในตาราง (ฉันได้ยินชื่อนี้เรียกว่าคีย์ตัวแทน) ที่มา: postgresqltutorial.com/postgresql-primary-keyฉันใหม่ทั้งหมดนี้ดังนั้นฉันขอขอบคุณโปสเตอร์ที่มีความรู้มากกว่านี้เพื่อชี้ให้เห็นถึงความแตกต่างที่ฉันพลาดไป
Poik

โอเคไม่ใช่คอลัมน์ ฉันอ่านผิด มันเป็นความขัดแย้งไม่ใช่คอลัมน์ ยังคงมีดัชนีคลัสเตอร์ แต่มันมีอยู่สองคอลัมน์แทนที่จะเป็นหนึ่งคอลัมน์ และแต่ละคอลัมน์ในนั้นไม่ใช่คีย์หลักของมันเอง แต่ทั้งชุดนั้นเป็นคีย์หลัก ดังนั้นจึงมี PK ไม่เกินหนึ่งตัวในกรณีเหล่านี้
Poik

46

สำหรับองค์กรหรือธุรกิจมีหน่วยงานทางกายภาพมากมาย (เช่นบุคคลทรัพยากรเครื่องจักร ฯลฯ ) และหน่วยงานเสมือน (งานกิจกรรมธุรกรรมกิจกรรม) โดยทั่วไปแล้วธุรกิจจำเป็นต้องบันทึกและประมวลผลข้อมูลขององค์กรธุรกิจเหล่านั้น คีย์ธุรกิจจะถูกระบุภายในโดเมนธุรกิจทั้งหมดโดยใช้คีย์

ตามความคาดหวังของ RDBMS คีย์ (aka Candidate Key) เป็นค่าหรือชุดของค่าที่ระบุเอนทิตีเฉพาะ

สำหรับ DB-Table จะมีคีย์จำนวนมากและอาจมีสิทธิ์สำหรับคีย์หลัก ดังนั้นคีย์ทั้งหมดคีย์หลักคีย์เฉพาะ ฯลฯ จะถูกเรียกรวมกันเป็นคีย์ผู้สมัคร อย่างไรก็ตาม DBA เลือกคีย์จากคีย์ตัวเลือกสำหรับการค้นหาเรคคอร์ดเรียกว่าคีย์หลัก

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

1. พฤติกรรม: คีย์หลักใช้เพื่อระบุแถว (บันทึก) ในตารางในขณะที่คีย์ซ้ำคือการป้องกันค่าที่ซ้ำกันในคอลัมน์ (ยกเว้นรายการที่เป็นโมฆะ)

2. การจัดทำดัชนี: โดยค่าเริ่มต้น SQL-engine จะสร้างดัชนีแบบกลุ่มบนคีย์หลักหากไม่มีอยู่และไม่มีการทำดัชนีแบบกลุ่มบนคีย์ซ้ำ

3. Nullability:คีย์หลักไม่รวมค่า Null ในขณะที่ Unique-key can

4. การดำรงอยู่:ตารางสามารถมีได้ไม่เกินหนึ่งคีย์หลัก แต่สามารถมีได้หลายคีย์ที่ไม่ซ้ำกัน

5. ความสามารถในการปรับเปลี่ยนได้:คุณไม่สามารถเปลี่ยนหรือลบค่าหลักได้ แต่สามารถใช้ค่าคีย์เฉพาะ

สำหรับข้อมูลเพิ่มเติมและตัวอย่าง:

http://dotnetauthorities.blogspot.in/2013/11/Microsoft-SQL-Server-Training-Online-Learning-Classes-Integrity-Constraints-PrimaryKey-Unique-Key_27.html


7
ในจุดที่ 5 คุณบอกว่าเราไม่สามารถเปลี่ยนหรือลบค่าหลักได้ เราสามารถเปลี่ยนค่าหลักในตารางได้โดยใช้คำสั่ง update
Kapil

3
@Kapil ทำเช่นนั้นจะเป็นการเต้นโดยมีวัตถุประสงค์หลักในการใช้คีย์หลัก
Gokigooooks

2
ดัชนีแบบคลัสเตอร์: แถวจะถูกจัดเก็บทางกายภาพบนดิสก์ในลำดับเดียวกับดัชนี
Duy Đặng

26

คีย์หลักจะต้องไม่ซ้ำกัน

คีย์ที่ไม่ซ้ำกันไม่จำเป็นต้องเป็นคีย์หลัก - ดูรหัสตัวเลือก

นั่นคืออาจมีมากกว่าหนึ่งชุดของคอลัมน์ในตารางที่สามารถระบุแถวโดยไม่ซ้ำ - เฉพาะหนึ่งในเหล่านี้สามารถเลือกเป็นคีย์หลัก ส่วนอื่น ๆ ที่ไม่ซ้ำกันคือกุญแจตัวเลือก


17

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

+-----------------------------------------+-----------------------------------------------+
|                Primary Key              |                    Unique Key                 |
+-----------------------------------------+-----------------------------------------------+
| Primary Key can't accept null values.   | Unique key can accept only one null value.    |
+-----------------------------------------+-----------------------------------------------+
| By default, Primary key is clustered    | By default, Unique key is a unique            |
| index and data in the database table is | non-clustered index.                          |
| physically organized in the sequence of |                                               |
| clustered index.                        |                                               |
+-----------------------------------------+-----------------------------------------------+
| We can have only one Primary key in a   | We can have more than one unique key in a     |
| table.                                  | table.                                        |
+-----------------------------------------+-----------------------------------------------+
| Primary key can be made foreign key     | In SQL Server, Unique key can be made foreign |
| into another table.                     | key into another table.                       |
+-----------------------------------------+-----------------------------------------------+

คุณสามารถค้นหาข้อมูลโดยละเอียดได้จาก:
http://www.dotnet-tricks.com/Tutorial/sqlserver/V2bS260912-Difference-between-Primary-Key-and-Unique-Key.html


16

คีย์หลักมีความหมายของการระบุแถวของฐานข้อมูล ดังนั้นอาจมีคีย์หลักเพียงคีย์เดียวเท่านั้นสำหรับตารางที่กำหนดในขณะที่สามารถมีได้หลายคีย์ที่ไม่ซ้ำกัน

ด้วยเหตุผลเดียวกันคีย์หลักไม่สามารถเป็น NULL ได้ (อย่างน้อยใน Oracle, ไม่แน่ใจเกี่ยวกับฐานข้อมูลอื่น ๆ )

เนื่องจากไม่ได้ระบุแถวจึงไม่ควรเปลี่ยนแปลง การเปลี่ยนกุญแจหลักถูกผูกไว้เพื่อก่อให้เกิดความเจ็บปวดอย่างรุนแรงและอาจเป็นการสาปแช่งนิรันดร์

ในกรณีส่วนใหญ่คุณต้องการ id ปลอมบางตัวสำหรับคีย์หลักซึ่งไม่ได้ใช้สำหรับอะไรเลยนอกจากการระบุแถวเดียวในตาราง

ปุ่มที่ไม่ซ้ำกันอาจเปลี่ยนแปลงได้มากเท่าที่คุณต้องการ


22
+1 สำหรับการกล่าวถึงความเสี่ยงของการสาปแช่งนิรันดร์ ถึงเวลาที่จะแนะนำเทววิทยาในทฤษฎีฐานข้อมูลเชิงสัมพันธ์
Neville Kuyt

PK ไม่สามารถเป็น NULL ใน SQL Server ได้เช่นกัน
mrd3650

7

คีย์หลักเป็นคีย์เฉพาะ

แต่ละตารางจะต้องมีที่มากที่สุด ONE คีย์หลัก แต่ก็สามารถมีคีย์ที่ไม่ซ้ำกันหลาย ๆ คีย์หลักถูกใช้เพื่อระบุแถวของตารางโดยไม่ซ้ำกัน คีย์หลักไม่สามารถอยู่ได้NULLเนื่องจากNULLไม่ใช่ค่า


6
  • คิดว่าชื่อตารางเป็นลูกจ้าง
  • คีย์หลัก
  • คีย์หลักไม่สามารถยอมรับค่าว่างได้ คีย์หลักบังคับใช้เอกลักษณ์ของคอลัมน์ เราสามารถมีคีย์หลักเดียวในตาราง
  • กุญแจที่ไม่ซ้ำ
  • รหัสที่ไม่ซ้ำสามารถยอมรับค่า Null ได้ คีย์ที่ไม่ซ้ำยังบังคับให้มีเอกลักษณ์ของคอลัมน์คุณสามารถคิดได้ว่าถ้าคีย์ที่ไม่ซ้ำมีค่า Null ทำไมมันถึงไม่ซ้ำกัน? ใช่แม้ว่ามันจะสามารถยอมรับค่า Null มันบังคับเอกลักษณ์ของคอลัมน์ เพียงแค่ดูที่ภาพ Emp_ID นั้นเป็นรหัสหลักและรหัสพลเมืองไม่ซ้ำกัน หวังว่าคุณจะเข้าใจ. เราสามารถใช้คีย์ที่ไม่ซ้ำกันหลายตัวในตาราง ป้อนคำอธิบายรูปภาพที่นี่

1
เราไม่สามารถแทรกค่า Null มากกว่าหนึ่งค่าในคีย์เฉพาะและจะไม่อนุญาตให้ซ้ำซ้อน
Masum

@ mahedi-hasan คอลัมน์คีย์ที่ไม่ซ้ำควรมีค่า NULL เพียงค่าเดียวหรือไม่ ทำไมสองแถวสุดท้ายในรหัสประจำตัวประชาชน NULL ฉันทำอะไรบางอย่างหายไปหรือเปล่า
ซูเปอร์โนวา

เพิ่งได้รับคำตอบสำหรับความคิดเห็นของฉันเองด้านบน ดูเหมือนว่า MySQL จะอนุญาตให้ NULL หลายตัวมีลักษณะเฉพาะดังนั้นดูเหมือนว่า @Mahedi_Hasan ใช้ MySQL stackoverflow.com/questions/3712222/…
ซูเปอร์โนวา

6

ฉันรู้ว่าคำถามนี้มีอายุหลายปี แต่ฉันต้องการที่จะให้คำตอบสำหรับการอธิบายนี้ทำไมมากกว่า

วัตถุประสงค์ของคีย์หลัก : เพื่อระบุแถวในฐานข้อมูลที่ไม่ซ้ำกัน => แถวหมายถึงอินสแตนซ์เดียวของประเภทเอนทิตีที่จำลองโดยตาราง คีย์หลักบังคับใช้ integrity ของเอนทิตี AKA Entity Integrity คีย์หลักจะเป็นดัชนีคลัสเตอร์คือมันกำหนดลำดับที่ข้อมูลจะถูกเก็บไว้ในตาราง

วัตถุประสงค์ของคีย์ที่ไม่ซ้ำ : ตกลงด้วยคีย์หลักเรามีวิธีในการระบุแถวโดยไม่ซ้ำกัน แต่ฉันมีความต้องการทางธุรกิจเช่นนั้นคอลัมน์อื่น / ชุดคอลัมน์ควรมีค่าที่ไม่ซ้ำกัน ในทางเทคนิคแล้วคอลัมน์นี้มีความเป็นเอกลักษณ์จึงอาจเป็นตัวเลือกในการบังคับใช้เอนทิตีที่สมบูรณ์ แต่สำหรับทุกคนที่เรารู้คอลัมน์นี้สามารถมีข้อมูลที่มาจากองค์กรภายนอกที่ฉันอาจมีข้อสงสัยเกี่ยวกับการเป็นเอกลักษณ์ ฉันไม่อาจเชื่อถือได้เพื่อให้มีความสมบูรณ์ของเอนทิตี ฉันแค่ทำให้มันเป็นกุญแจสำคัญที่ไม่ซ้ำกันเพื่อตอบสนองความต้องการทางธุรกิจของฉัน

ไปแล้ว!


1

หากการออกแบบฐานข้อมูลของคุณนั้นไม่จำเป็นต้องใช้รหัสที่ต่างประเทศคุณสามารถใช้รหัสที่ไม่ซ้ำกันได้ ( แต่จำไว้ว่ารหัสที่ไม่ซ้ำกันอนุญาตให้มีค่า Null เดียว )

หากฐานข้อมูลของคุณต้องการคีย์ต่างประเทศคุณจะไม่ต้องเลือกคีย์หลัก

เพื่อดูความแตกต่างระหว่างการเยี่ยมชมที่ไม่ซ้ำกับคีย์หลัก ที่


1

คีย์ที่ไม่ซ้ำ: - มันควรจะใช้เมื่อคุณต้องให้ค่าที่ไม่ซ้ำกันในกรณีของคีย์ที่ไม่ซ้ำกันก็หมายความว่าได้รับอนุญาตค่า null คีย์ที่ไม่ซ้ำกันคือคีย์เหล่านั้นซึ่งเป็นเอกลักษณ์และไม่เหมือนกันในคอลัมน์นั้นเช่นชื่อสัตว์เลี้ยงของคุณ .it ไม่ได้เป็นอะไรที่เป็นโมฆะและถ้าคุณถามในบริบทของฐานข้อมูลคุณจะต้องสังเกตว่าทุกค่าจะแตกต่างจากค่าอื่นในฐานข้อมูล ยกเว้น SQL Server โดยที่ null = null เป็นจริง


คีย์หลัก: - มันควรใช้เมื่อคุณต้องระบุ row.primary เป็นคีย์ที่ไม่ซ้ำกันสำหรับทุกแถวในฐานข้อมูลข้อ จำกัด คือไม่อนุญาตให้มีค่าว่างดังนั้นคุณอาจเห็นว่าฐานข้อมูล มีคอลัมน์ซึ่งเป็นการเพิ่มอัตโนมัติและเป็นคีย์หลักของตาราง รวมทั้งจะสามารถนำมาใช้เป็นคีย์ต่างประเทศใน table.example อื่นสามารถOrderID ตารางการสั่งซื้อ , billId ในตารางการเรียกเก็บเงิน

ตอนนี้กลับมาสู่สถานการณ์เมื่อใช้: -

1) คีย์หลักในคอลัมน์ที่ไม่สามารถเป็นโมฆะในตารางและคุณใช้เป็นคีย์ต่างประเทศในตารางอื่นสำหรับการสร้างความสัมพันธ์

2) คีย์เฉพาะในตารางที่ไม่มีผลกระทบในตารางหรือในฐานข้อมูลทั้งหมดไม่ว่าคุณจะใช้ null สำหรับคอลัมน์เฉพาะเช่นของว่างในร้านอาหารมันเป็นไปได้ที่คุณจะไม่ใช้ของว่างในร้านอาหาร


1

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

ทั้งสองPrimary keyและUnique Keyใช้เพื่อกำหนดแถวในตารางโดยไม่ซ้ำกัน Primary Keyสร้างของคอลัมน์ในขณะที่clustered indexUnique creates an unclustered index of the column

A Primary Keyไม่อนุญาตให้มีNULL valueแต่จะช่วยให้a Unique Keyone NULL value


0

ซิงเกิ้ลคีย์หลักคือเอกลักษณ์และไม่สามารถเป็นโมฆะไม่ซ้ำใครสามารถเป็นโมฆะและอาจไม่ซ้ำกัน


"ไม่ซ้ำกันอาจเป็นโมฆะและอาจไม่ซ้ำกัน" ที่may not be uniqueนี่หมายความว่าอย่างไร
Yusuf Hassan

0

คีย์หลัก

จุดประสงค์หลักของคีย์หลักคือการให้วิธีการระบุแต่ละระเบียนในตาราง

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

คีย์หลักมีคุณสมบัติดังต่อไปนี้:

  1. สามารถมีได้หนึ่งคีย์หลักเท่านั้นสำหรับตาราง
  2. คีย์หลักประกอบด้วยหนึ่งคอลัมน์ขึ้นไป
  3. คีย์หลักบังคับใช้ integrity integrity ของตาราง
  4. คอลัมน์ทั้งหมดที่กำหนดจะต้องกำหนดเป็น NOT NULL
  5. คีย์หลักระบุแถวอย่างไม่ซ้ำกัน
  6. คีย์หลักส่งผลให้ดัชนีที่ไม่ซ้ำ CLUSTERED โดยค่าเริ่มต้น

กุญแจที่ไม่ซ้ำ

คีย์เฉพาะจะเรียกว่าข้อ จำกัด ที่ไม่ซ้ำกัน ข้อ จำกัด ที่ไม่ซ้ำกันสามารถนำมาใช้เพื่อให้แน่ใจว่าแถวจะไม่ซ้ำกันภายในฐานข้อมูล

เราไม่ได้ทำอย่างนั้นกับคีย์หลัก? ใช่เราทำ แต่ตารางอาจมีคอลัมน์หลายชุดที่คุณต้องการไม่ซ้ำกัน

ใน SQL Server คีย์เฉพาะมีคุณสมบัติดังต่อไปนี้:

  1. สามารถมีได้หลายปุ่มที่ไม่ซ้ำกันที่กำหนดไว้ในตาราง
  2. คีย์ที่ไม่ซ้ำส่งผลให้ดัชนีที่ไม่ซ้ำ NONCLUSTERED โดยค่าเริ่มต้น
  3. มีอย่างน้อยหนึ่งคอลัมน์ที่สร้างคีย์ที่ไม่ซ้ำกัน
  4. คอลัมน์อาจเป็น NULL แต่อนุญาตให้ใช้หนึ่ง NULL ต่อคอลัมน์
  5. ข้อ จำกัด ที่ไม่ซ้ำกันสามารถอ้างอิงได้โดยข้อ จำกัด ของ Foreign Key

แหล่งที่มา: ที่นี่


0

คุณสมบัติหลักของคีย์หลักคือ:

มันจะต้องมีค่าที่ไม่ซ้ำกันสำหรับแต่ละแถวของข้อมูล มันไม่สามารถมีค่าเป็นศูนย์ คีย์หลักเดียวเท่านั้นในตาราง

คุณสมบัติหลักของคีย์ที่ไม่ซ้ำคือ:

นอกจากนี้ยังสามารถมีค่าที่ไม่ซ้ำกันสำหรับแต่ละแถวของข้อมูล

นอกจากนี้ยังสามารถมีค่าเป็นศูนย์

คีย์ไม่ซ้ำกันหลายตัวในตาราง

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