MySQL'de Anahtar, Birincil Anahtar, Benzersiz Anahtar ve Dizin arasındaki fark


250

Ben ne zaman kullanmalıyım KEY, PRIMARY KEY, UNIQUE KEYve INDEX?


2
PRIMARY tuşu satırları tanımlamak, aynı veriye sahip iki satır eklemeyi önlemek içindir ... INDEX tuşu aramayı hızlandırmak içindir (ekleme işleminde minimum yavaşlık). Bir sütundaki benzersiz veriler için EŞSİZ anahtar.
Hos Mercury


Yanıtlar:


303

KEYve INDEXMySQL içindeki eş anlamlılardır. Aynı şeyi kastediyorlar. Veritabanlarında , veri alma hızını artırmak için dizinler kullanırsınız. Bir indeks tipik olarak kullanılan sütunlar üzerinde oluşturulan JOIN, WHEREve ORDER BYmaddeleri.

Bir tablonuz olduğunu usersve soyadı 'Smith' olan tüm kullanıcıları aramak istediğinizi düşünün . Bir dizin olmadan, veritabanı tablonun tüm kayıtlarını geçmek zorunda kalacak: bu yavaştır, çünkü veritabanınızda ne kadar çok kayıt varsa, sonucu bulmak için o kadar çok iş gerekir. Öte yandan, bir dizin veritabanının 'Smith' kayıtlarının tutulduğu ilgili sayfalara hızlı bir şekilde geçmesine yardımcı olacaktır. Bu, insanlar, soyadına göre birini bulmak için bir telefon rehberi dizininden nasıl geçtiğimize çok benziyor: Bilgileri sırayla eklediğimiz sürece, kapaktan kapağa kadar dizinde aramaya başlamıyoruz. 'S' sayfalarına hızlıca atlamak için tuşlarını kullanın.

Birincil anahtarlar ve benzersiz anahtarlar benzerdir. Birincil anahtar, bir satırı benzersiz şekilde tanımlayabilen bir sütun veya sütun birleşimidir. Benzersiz bir anahtarın özel bir durumudur . Bir tablonun en fazla bir birincil anahtarı olabilir, ancak birden fazla benzersiz anahtarı olabilir. Bir sütunda benzersiz bir anahtar belirlediğinizde, tablodaki hiçbir iki satır aynı değere sahip olamaz.

Ayrıca birincil anahtarlar veya benzersiz anahtarlar olarak tanımlanan sütunların MySQL'de otomatik olarak dizine eklendiğini unutmayın.


2
aynı değere sahip benzersiz bir anahtar ve birincil anahtar alabilir miyim?
YARDIM

58
@needHELP: passengersAşağıdaki alanlarla adlandırılmış bir tablonuz varsa : (id, first_name, last_name, age, passport_number)normalde idsütunu birincil anahtar olacak şekilde ayarlarsınız . Birincil anahtar otomatik olarak benzersiz bir anahtardır. Temel fark, tabloda yalnızca bir birincil anahtar olabilmeniz ve sütunun NULLdeğer içerememesidir . Kurmak gerek yoktur idolmak sütunu UNIQUEbirincil anahtar olarak ayarlayarak, otomatik olarak benzersiz olması garanti çünkü ... O zaman da ayarlayabilirsiniz passport_numberiçin UNIQUEböylece en fazla bir yolcu ...
Daniel Vassallo

32
... aynı pasaport numarasına sahip olabilir. Ancak pasaport numarası olmayan bazı yolcularınız olabilir (örneğin çocuklar). Bu durumda, NULLbu sütuna sorunsuz bir şekilde ekleyebilirsiniz .
Daniel Vassallo

2
@DanielVassallo MySQL tarafından kullanılan eşanlamlılar arasında seçim yapma şeklinizi seviyorum.
SIFE

1
En iyi açıklamalardan biri. Çok teşekkürler :-)
Ravi Hirani

61

KEY ve INDEX, eşanlamlıdır.

Performans ölçümleri ve EXPLAIN size eksik bir dizin nedeniyle sorgunun verimsiz olduğunu gösterdiğinde bir dizin eklemelisiniz. Dizin eklemek sorguların performansını artırabilir (ancak tablodaki değişiklikleri yavaşlatabilir).

Bu sütundaki (veya sütunlardaki) değerlerin benzersiz olmasını engellemek istediğinizde BENZERSİZ'i kullanmalısınız, böylece yinelenen değerler ekleme girişimleri hataya neden olur.

Bir PRIMARY KEY hem benzersiz bir kısıtlamadır hem de sütunun NULL DEĞİLDİR. Her satıra bir kimlik vermek için kullanılır. Bu, yabancı anahtar kısıtlaması ile başka bir tabloya katılmak için yararlı olabilir. Bir tablonun BİRİNCİL ANAHTAR'a sahip olması gerekmese de, genellikle iyi bir fikirdir.


İLK ANAHTAR her satıra bir kimlik vermek için kullanılır? cehaletim için özür dilerim.
YARDIM

@needHELP: Tablonuzdaki herhangi bir satırı benzersiz bir şekilde tanımlamanın bir yolu olarak kullanılır. Örneğin, tablonuzdaki belirli bir satırı silmek istiyorsanız, yanlışlıkla yanlış satırı silmemeniz için onu net bir şekilde tanımlamanın bir yolunu bulmanız yararlı olacaktır. Ayrıca, dizin oluşturulduğu için başka bir tabloyla birleştirmek için de yararlıdır.
Mark Byers

48

Birincil anahtarNULL değerlere izin vermez , ancak benzersiz anahtarNULL değerlere izin verir.

Biz ilan edebilir tek birincil anahtar bir tabloda, ancak bir tablo olabilir çoklu benzersiz anahtarları (sütun atama).


17

PRIMARY KEYAND UNIQUE KEY, farklı işlevleri olması dışında benzerdir. Birincil anahtar, tablo satırını benzersiz kılar (aynı anahtarla 2 satır olamaz). Bir veritabanı tablosunda yalnızca 1 birincil anahtarınız olabilir.

Benzersiz anahtar, tablo satırındaki tablo sütununu benzersiz kılar (yani, 2 tablo satırı aynı tam değere sahip olamaz). 1'den fazla benzersiz anahtar tablosu sütununa sahip olabilirsiniz (tablodaki yalnızca 1 tablo sütununun benzersiz olduğu anlamına gelen birincil anahtarın aksine).

INDEXaynı zamanda benzersizlik yaratır. MySQL (örnek), endekslenen sütun için bir indeksleme tablosu oluşturur. Bu şekilde, sorgu bu dizinli tablo sütununda sorgulandığında tablo satırı değerini almak daha kolaydır. Dezavantajı, birçok güncelleme / silme / oluşturma işlemi yaparsanız, MySQL'in dizinleme tablolarını yönetmesi gerektiğidir (ve bu bir performans darboğazı olabilir).

Bu yardımcı olur umarım.


Ayrıca, UNIQUE KEYolabilir NULLama PRIMARY KEYolamaz NULL.
Rafay

10

Benzersiz Anahtarlar: İki satırın benzer olmadığı sütunlar

Birincil Anahtar: Bir tablodaki her satırı benzersiz bir şekilde tanımlayabilen minimum sütun sayısının toplanması (yani, birincil anahtarı oluşturan tüm sütunlarda iki satır benzer değildir). Bir tabloda birden fazla birincil anahtar olabilir. Benzersiz bir anahtar varsa, tablodaki birincil anahtardır ("birincil anahtar değil"). Benzersiz bir anahtar yoksa, bazı tablolarda birincil anahtar oluşturabilen (ad_adı, soyad_adı, baba_adı, ana_adı) gibi bir satırı tanımlamak için birden fazla sütun değeri gerekecektir.

Dizin: sorguları optimize etmek için kullanılır. Sonuçları birkaç kez sütun bazında arayacak veya sıralayacaksanız (örneğin, çoğunlukla öğrenciler öğrencileri rulo nolarına göre değil, ada göre arayacaklardır) sütun değerlerinin tümü " örneğin "ikili ağaç algoritmasıyla".


Sanırım bir masada sadece bir PK olabilir demek
istediniz

7

Birincil anahtar - bir tabloya bir tabloya yalnızca bir birincil anahtar koyabiliriz ve değerleri tabloya girerken bu sütunu boş bırakamayız.

Benzersiz Anahtar - bir tabloya birden fazla benzersiz anahtar koyabiliriz ve değerleri tabloya girerken bu sütunu boş bırakabiliriz. Birincil ve benzersiz anahtarı uyguladığımızda sütun benzersiz değerler alır (aynı değildir).


tablo sadece bir PRIMARY KEY var, ancak benzersiz anahtarlar birden fazla.
VIKASH

6

Birincil anahtar, farklı tablolarla çalışmak için kullanılır. Bu ilişkisel veritabanlarının temelidir. Bir kitap veritabanınız varsa, 2 tablo oluşturmak daha iyidir - 1) kitaplar ve 2) INT birincil anahtarı "id" olan yazarlar. Sonra yazarların adı yerine kitaplarda kimliği kullanın.

Tekrarlanan girişlerin olmasını istemiyorsanız, benzersiz anahtar kullanılır. Örneğin, kitap tablonuzda başlık olabilir ve her başlık için yalnızca bir giriş olduğundan emin olmak isteyebilirsiniz.


2

Benzersiz anahtarı :

  1. Birden fazla değer boş olabilir.
  2. Benzersiz anahtarda iki tuple aynı değere sahip olamaz.
  3. Bir veya daha fazla benzersiz anahtar birincil anahtar oluşturmak için birleştirilebilir, ancak tam tersi kullanılamaz.

Birincil anahtar

  1. Birden fazla benzersiz anahtar içerebilir.
  2. Bir tuplei benzersiz bir şekilde temsil eder.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.