perbedaan antara kunci primer dan kunci unik

252

Saya menggunakan database mysql. Saya memiliki kebingungan antara kunci primer dan kunci unik.

Tolong bantu saya di mana saya harus membuat kunci utama dan unik. Maksud saya dalam situasi apa kita membuat kunci unik atau kunci primer.

Anuj
sumber
9
wrt null-ability cara yang baik untuk membedakan b / w mereka PRIMARY KEY = UNIQUE KEY + Not Null CONSTRAINT
KNU

Jawaban:

233

Kunci utama:

  • Hanya ada satu kunci utama dalam sebuah tabel
  • Dalam beberapa DBMS itu tidak bisa NULL- misalnya MySQL menambahkanNOT NULL
  • Kunci Utama adalah pengidentifikasi kunci unik dari catatan

Kunci unik:

  • Dapat lebih dari satu kunci unik dalam satu tabel
  • Kunci unik dapat memiliki NULLnilai
  • Itu bisa menjadi kunci kandidat
  • Kunci unik dapat berupa NULL; beberapa baris dapat memiliki NULLnilai dan karenanya tidak dapat dianggap "unik"
Tuan KB
sumber
11
Juga ingin menambahkan bahwa kunci utama dapat dibuat pada banyak kolom, misalnya kunci Utama (PelangganID, ProductID). Ini disebut kunci primer komposit. Ini untuk memperjelas poin pertama, karena mungkin perlu (baca satu kunci => satu kolom) oleh pendatang baru ke sql
:)
1
Apa maksud Anda dari 'dapat menjadi kunci kandidat'?
1
"hanya nol tunggal yang diizinkan" - ini tidak benar, setidaknya tidak untuk MySQL.
Jānis Elmeris
69
Kunci unik bisa nol dan mungkin bukan berarti unik ??
Pratik
20
@PratikCJoshi Dia mungkin berarti bahwa bisa beberapa baris dengan nol pada kunci yang unik.
John
77

Unique Key (UK) : Ini adalah kolom atau sekelompok kolom yang dapat mengidentifikasi keunikan berturut-turut.

Kunci Utama (PK) : Ini juga merupakan kolom atau grup kolom yang dapat mengidentifikasi keunikan dalam satu baris.

Jadi kunci utama hanyalah nama lain untuk kunci unik, tetapi implementasi standar di SQL Server berbeda untuk kunci utama dan unik.

Secara default:

  1. PK menciptakan indeks Clustered dan Inggris menciptakan Indeks Non Clustered.
  2. PK bukan nol, tetapi Inggris mengizinkan nol (Catatan: Secara Default)
  3. Hanya ada satu dan hanya satu PK di atas meja, tetapi mungkin ada beberapa UK
  4. Anda dapat mengganti implementasi default tergantung pada kebutuhan Anda.

Itu benar-benar tergantung apa tujuan Anda ketika memutuskan apakah akan membuat UK atau PK. Ini mengikuti analogi seperti "Jika ada tim yang terdiri dari tiga orang, maka mereka semua adalah teman sebaya, tetapi akan ada satu dari mereka yang akan menjadi sepasang teman sebaya: PK dan Inggris memiliki hubungan yang serupa.". Saya akan menyarankan membaca artikel ini: Contoh yang diberikan oleh penulis mungkin tampaknya tidak cocok, tetapi cobalah untuk mendapatkan ide keseluruhan.

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

dhi
sumber
baca sekitar 10 halaman web, yang mengatakan, PK dapat memuat lebih dari satu kolom. Lalu bagaimana mungkin ada satu dan hanya satu PK di atas meja?
@android A PK dengan lebih dari satu kolom bertindak sebagai satu kolom sehubungan dengan keunikan. Setidaknya dalam PostgreSQL, ini berarti bahwa kolom baru (dengan nama default [table_name]_pkey) ditambahkan ke tabel (saya pernah mendengar ini disebut sebagai kunci pengganti). Sumber: postgresqltutorial.com/postgresql-primary-key Saya baru dalam hal ini, jadi saya menghargai poster yang lebih luas untuk menunjukkan nuansa yang saya lewatkan.
Poik
Oke, ini bukan kolom. Saya salah membaca. Itu adalah sebuah contraint, bukan sebuah kolom. Masih ada indeks berkerumun, tetapi lebih dari dua kolom, bukan satu. Dan setiap kolom di dalamnya bukan kunci primer sendiri, melainkan seluruh rangkaian adalah kunci primer. Jadi tidak ada lebih dari satu PK dalam hal ini.
Poik
46

Untuk organisasi atau bisnis, ada begitu banyak entitas fisik (seperti orang, sumber daya, mesin, dll.) Dan entitas virtual (Tugas, transaksi, aktivitas) mereka. Biasanya, bisnis perlu mencatat dan memproses informasi entitas bisnis tersebut. Entitas bisnis ini diidentifikasi dalam seluruh domain bisnis oleh suatu Kunci.

Sesuai RDBMS prospektif, Kunci (alias Kandidat Kunci) adalah nilai atau sekumpulan nilai yang secara unik mengidentifikasi entitas.

Untuk DB-Table, ada begitu banyak kunci yang ada dan mungkin memenuhi syarat untuk Kunci Utama. Sehingga semua kunci, kunci primer, kunci unik, dll secara kolektif disebut sebagai Kandidat Kunci. Namun, DBA memilih kunci dari kunci kandidat untuk mencari catatan disebut kunci Utama.

Perbedaan antara Primary Key dan Unique key

1. Perilaku: Kunci Utama digunakan untuk mengidentifikasi baris (catatan) dalam sebuah tabel, sedangkan Unique-key adalah untuk mencegah nilai duplikat dalam kolom (dengan pengecualian entri nol).

2. Pengindeksan: Secara default SQL-engine membuat Indeks Clustered pada kunci utama jika tidak ada dan Indeks Non-Clustered pada kunci-Unik.

3. Nullability: Kunci primer tidak termasuk nilai Null, sedangkan Unique-key bisa.

4. Keberadaan: Sebuah tabel dapat memiliki paling banyak satu kunci utama, tetapi dapat memiliki beberapa kunci unik.

5. Dapat dimodifikasi: Anda tidak dapat mengubah atau menghapus nilai-nilai primer, tetapi nilai-nilai Unik-kunci bisa.

Untuk informasi dan Contoh lebih lanjut:

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

nayeemDotNetAuthorities
sumber
7
Pada poin ke-5 Anda mengatakan kami tidak dapat mengubah atau menghapus nilai-nilai primer. kami pasti dapat mengubah nilai-nilai utama dalam tabel dengan menggunakan pernyataan pembaruan.
Kapil
3
@Kapil melakukan hal itu mengalahkan seluruh tujuan menggunakan kunci utama.
Gokigooooks
2
indeks berkerumun: baris disimpan secara fisik pada disk dalam urutan yang sama dengan indeks
Duy Đặng
26

Kunci utama harus unik.

Kunci unik tidak harus menjadi kunci utama - lihat kunci kandidat .

Yaitu, mungkin ada lebih dari satu kombinasi kolom pada tabel yang dapat mengidentifikasi satu baris secara unik - hanya satu di antaranya yang dapat dipilih sebagai kunci utama. Yang lain, meskipun unik adalah kunci kandidat.

Oded
sumber
17

Perbedaan antara Kunci Utama dan Kunci Unik

+-----------------------------------------+-----------------------------------------------+
|                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.                       |
+-----------------------------------------+-----------------------------------------------+

Anda dapat menemukan informasi terperinci dari: http://www.dotnet-tricks.com/Tutorial/sqlserver/V2bS260912-Perbedaan- antara-Primary-Key- and-
Unique-Key.html

Omer K
sumber
16

Kunci utama memiliki semantik untuk mengidentifikasi baris database. Karenanya hanya ada satu kunci utama untuk tabel yang diberikan, sementara ada banyak kunci unik.

Juga karena alasan yang sama kunci utama tidak boleh NULL (setidaknya di Oracle, tidak yakin tentang database lain)

Karena mengidentifikasi baris, seharusnya tidak pernah berubah. Mengubah kunci primer terikat untuk menyebabkan rasa sakit yang serius dan mungkin kutukan abadi.

Karenanya dalam kebanyakan kasus Anda menginginkan beberapa id buatan untuk kunci primer yang tidak digunakan untuk apa pun selain mengidentifikasi baris tunggal dalam tabel.

Kunci unik di sisi lain dapat berubah sebanyak yang Anda inginkan.

Jens Schauder
sumber
22
+1 untuk menyebutkan risiko hukuman abadi. Saatnya memperkenalkan teologi ke dalam teori basis data relasional.
Neville Kuyt
PK juga tidak bisa NULL di SQL Server
mrd3650
7

Kunci utama adalah kunci unik.

Setiap tabel harus memiliki paling banyak SATU kunci utama tetapi dapat memiliki beberapa kunci unik. Kunci utama digunakan untuk mengidentifikasi secara unik satu baris tabel. Kunci primer tidak boleh NULLkarena NULLbukan nilai.

Buhake Sindi
sumber
6
  • Pikirkan nama tabelnya adalah karyawan.
  • Kunci utama
  • Kunci utama tidak dapat menerima nilai nol. kunci utama menegakkan keunikan kolom. Kami hanya dapat memiliki satu kunci Primer dalam tabel.
  • Kunci unik
  • Kunci unik dapat menerima nilai nol. kunci unik juga menegakkan keunikan kolom. Anda dapat berpikir jika kunci unik berisi nilai nol lalu mengapa itu bisa unik? ya, meskipun ia dapat menerima nilai nol, ia memberlakukan keunikan kolom. lihat saja gambarnya. Emp_ID di sini adalah yang utama dan Citizen ID adalah unik. Semoga kamu mengerti. Kita bisa menggunakan beberapa kunci unik dalam sebuah tabel. masukkan deskripsi gambar di sini
Mahedi Hasan Durjoy
sumber
1
kami tidak dapat memasukkan lebih dari satu nilai nol di kunci Unik dan itu tidak akan mengizinkan duplikat juga.
Masum
@ mahedi-hasan Bukankah kolom kunci unik seharusnya hanya memiliki satu nilai NULL? Kenapa dua baris terakhir di Citizen ID NULL? Apakah saya melewatkan sesuatu di sini?
supernova
Baru saja mendapat jawaban atas komentar saya sendiri di atas. Sepertinya MySQL memungkinkan beberapa NULL dalam keunikan juga jadi sepertinya @Mahedi_Hasan menggunakan MySQL. stackoverflow.com/questions/3712222/…
supernova
6

Saya tahu pertanyaan ini sudah berumur beberapa tahun, tetapi saya ingin memberikan jawaban untuk penjelasan ini mengapa bukan bagaimana

Tujuan dari Kunci Utama : Untuk mengidentifikasi baris dalam database secara unik => Baris mewakili satu instance dari tipe entitas yang dimodelkan oleh tabel. Kunci utama memberlakukan integritas suatu entitas, AKA Entity Integrity. Primary Key akan menjadi indeks berkerumun yaitu mendefinisikan urutan di mana data secara fisik disimpan dalam sebuah tabel.

Tujuan Kunci Unik : Oke, dengan Kunci Utama kami memiliki cara untuk mengidentifikasi baris secara unik. Tapi saya punya kebutuhan bisnis sehingga, kolom lain / satu set kolom harus memiliki nilai unik. Secara teknis, mengingat kolom ini unik, ia dapat menjadi kandidat untuk menegakkan integritas entitas. Namun yang kami tahu, kolom ini dapat berisi data yang berasal dari organisasi eksternal yang mungkin saya ragukan menjadi unik. Saya mungkin tidak mempercayainya untuk memberikan integritas entitas. Saya hanya membuatnya menjadi kunci unik untuk memenuhi kebutuhan bisnis saya.

Ini dia!

Manuri Perera
sumber
1

Jika desain Basis data Anda sedemikian rupa sehingga tidak memerlukan kunci asing, maka Anda dapat menggunakan kunci Unik ( tapi ingat kunci unik memungkinkan nilai nol tunggal ).

Jika database Anda meminta kunci asing maka Anda pergi tanpa pilihan Anda harus pergi dengan kunci utama.

Untuk melihat perbedaan antara kunjungan kunci primer dan unik di sini

pengguna2903536
sumber
1

Kunci unik: - Ini harus digunakan ketika Anda harus memberikan nilai unik. Dalam kasus kunci unik itu berarti nilai nol juga diperbolehkan. Kunci unik adalah kunci yang unik dan tidak serupa di kolom itu seperti misalnya nama hewan peliharaan Anda . Itu bisa tidak seperti null dan jika Anda bertanya dalam konteks database maka harus dicatat bahwa setiap null berbeda dari nol lain dalam database. KECUALI-SQL Server di mana null = null benar


primary key: - Ini harus digunakan ketika Anda harus memberikan secara unik mengidentifikasi sebuah baris. primer adalah kunci yang unik untuk setiap baris dalam batasan database adalah bahwa ia tidak mengizinkan nol di dalamnya. jadi, Anda mungkin telah melihat bahwa database memiliki kolom yang merupakan kenaikan otomatis dan itu adalah kunci utama tabel. ditambah itu dapat digunakan sebagai kunci asing di tabel lain. contoh dapat orderId di Tabel pesanan , billId di Tabel tagihan .

sekarang kembali ke situasi kapan harus menggunakannya: -

1) kunci utama di kolom yang tidak bisa nol dalam tabel dan Anda menggunakan kunci asing di tabel lain untuk membuat hubungan

2) kunci unik di tabel di mana itu tidak mempengaruhi dalam tabel atau di seluruh database apakah Anda mengambil nol untuk kolom tertentu seperti camilan di restoran itu mungkin Anda tidak mengambil camilan di restoran

ayushs27
sumber
1

perbedaan antara Primary Key dan Unique Key

Keduanya Primary keydan Unique Keydigunakan untuk secara unik mendefinisikan baris dalam tabel. Primary Keymenciptakan a clustered indexdari kolom sedangkan a Unique creates an unclustered index of the column.

A Primary Keytidak mengizinkan NULL value, namun a Unique Keymengizinkan one NULL value.

Gufran Hasan
sumber
0

Simply Primary Key adalah unik dan tidak bisa nol, unik bisa nol dan mungkin tidak unik.

Mohammed F. Ghazo
sumber
"unik bisa nol dan mungkin tidak unik". Apa may not be uniqueartinya di sini?
Yusuf Hassan
0

Kunci Utama

Tujuan utama dari kunci utama adalah untuk menyediakan sarana untuk mengidentifikasi setiap catatan dalam tabel.

Kunci utama menyediakan sarana untuk mengidentifikasi baris, menggunakan data di dalam baris. Kunci utama dapat didasarkan pada satu atau beberapa kolom, seperti nama depan dan belakang; Namun, dalam banyak desain, kunci utama adalah nomor yang dibuat secara otomatis dari kolom identitas.

Kunci utama memiliki karakteristik berikut:

  1. Hanya ada satu kunci utama untuk sebuah tabel.
  2. Kunci utama terdiri dari satu atau beberapa kolom.
  3. Kunci utama memberlakukan integritas entitas tabel.
  4. Semua kolom yang didefinisikan harus didefinisikan sebagai NOT NULL.
  5. Kunci utama secara unik mengidentifikasi satu baris.
  6. Kunci primer menghasilkan indeks unik CLUSTERED secara default.

Kunci unik

Kunci unik juga disebut kendala unik. Batasan unik dapat digunakan untuk memastikan baris unik dalam database.

Bukankah kita sudah melakukannya dengan kunci utama? Ya, memang, tapi sebuah tabel mungkin memiliki beberapa set kolom yang Anda inginkan unik.

Di SQL Server kunci unik memiliki karakteristik berikut:

  1. Mungkin ada beberapa kunci unik yang ditentukan pada tabel.
  2. Tombol Unik menghasilkan Indeks Unik NONCLUSTERED secara default.
  3. Satu atau lebih kolom membuat kunci unik.
  4. Kolom mungkin NULL, tetapi pada satu NULL per kolom diperbolehkan.
  5. Batasan unik dapat dirujuk oleh Batasan Kunci Asing.

sumber: di sini

Manish Vadher
sumber
0

Fitur utama kunci utama adalah:

Itu harus mengandung nilai unik untuk setiap baris data. Itu tidak bisa mengandung nilai nol. Hanya satu kunci utama dalam sebuah tabel.

Fitur utama kunci Unik adalah:

Itu juga dapat berisi nilai unik untuk setiap baris data.

Itu juga bisa berisi nilai null.

Beberapa kunci unik dalam sebuah tabel.

Nischal Tyagi
sumber