Unterschied zwischen Schlüssel, Primärschlüssel, eindeutigem Schlüssel und Index in MySQL


250

Wann soll ich KEY, PRIMARY KEY, UNIQUE KEYund INDEX?


2
Der PRIMARY-Schlüssel dient zum Identifizieren von Zeilen. Verhindern Sie das Einfügen von zwei Zeilen mit denselben identischen Daten. Der INDEX-Schlüssel dient zum Beschleunigen der Suche (minimale Verlangsamung beim Einfügen). EINZIGARTIGER Schlüssel für eindeutige Daten in einer Spalte.
Hos Mercury


Antworten:


303

KEYund INDEXsind Synonyme in MySQL. Sie bedeuten dasselbe. In Datenbanken würden Sie Indizes verwenden , um die Geschwindigkeit des Datenabrufs zu verbessern. Ein Index wird in der Regel auf Spalten erstellt , die in JOIN, WHEREund ORDER BYKlauseln.

Stellen Sie sich vor, Sie haben eine Tabelle mit dem Namen usersund möchten nach allen Benutzern suchen, die den Nachnamen 'Smith' haben. Ohne einen Index müsste die Datenbank alle Datensätze der Tabelle durchlaufen: Dies ist langsam, denn je mehr Datensätze sich in Ihrer Datenbank befinden, desto mehr Arbeit muss sie leisten, um das Ergebnis zu finden. Auf der anderen Seite hilft ein Index der Datenbank, schnell zu den relevanten Seiten zu springen, auf denen die 'Smith'-Datensätze gespeichert sind. Dies ist sehr ähnlich zu der Art und Weise, wie wir Menschen ein Telefonbuchverzeichnis durchsuchen, um jemanden mit dem Nachnamen zu finden: Wir beginnen nicht, das Verzeichnis von Anfang bis Ende zu durchsuchen, solange wir die Informationen in einer Reihenfolge einfügen, die wir können Verwenden Sie diese Option, um schnell zu den 'S'-Seiten zu springen.

Primärschlüssel und eindeutige Schlüssel sind ähnlich. Ein Primärschlüssel ist eine Spalte oder eine Kombination von Spalten, mit der eine Zeile eindeutig identifiziert werden kann. Es ist ein Sonderfall eines eindeutigen Schlüssels . Eine Tabelle kann höchstens einen Primärschlüssel, aber mehr als einen eindeutigen Schlüssel haben. Wenn Sie einen eindeutigen Schlüssel in einer Spalte angeben, dürfen keine zwei unterschiedlichen Zeilen in einer Tabelle denselben Wert haben.

Beachten Sie auch, dass Spalten, die als Primärschlüssel oder eindeutige Schlüssel definiert sind, in MySQL automatisch indiziert werden.


2
Kann ich sowohl einen eindeutigen Schlüssel als auch einen Primärschlüssel mit demselben Wert haben?
Hilfe

58
@needHELP: Wenn Sie eine Tabelle passengersmit den folgenden Feldern aufgerufen haben (id, first_name, last_name, age, passport_number), richten Sie die idSpalte normalerweise als Primärschlüssel ein. Ein Primärschlüssel ist automatisch ein eindeutiger Schlüssel. Der Hauptunterschied besteht darin, dass Sie nur einen Primärschlüssel in der Tabelle haben können und dass die Spalte keine NULLWerte enthalten kann . Es ist nicht erforderlich, die idSpalte so einzurichten , UNIQUEdass sie durch Festlegen eines Primärschlüssels automatisch eindeutig ist ... Dann können Sie auch festlegen passport_number, UNIQUEdass nicht mehr als ein Passagier ...
Daniel Vassallo

32
... könnte die gleiche Passnummer haben. Möglicherweise haben Sie jedoch einige Passagiere (z. B. Kinder) ohne Passnummer. In diesem Fall können Sie NULLproblemlos in diese Spalte einfügen .
Daniel Vassallo

2
@DanielVassallo Ich mag die Art und Weise, wie Sie es zwischen den von MySQL verwendeten Synonymen löschen.
SIFE

1
Eine der besten Erklärungen. Vielen Dank :-)
Ravi Hirani

61

KEY und INDEX sind Synonyme.

Sie sollten einen Index hinzufügen, wenn Leistungsmessungen und EXPLAIN Ihnen zeigen, dass die Abfrage aufgrund eines fehlenden Index ineffizient ist. Das Hinzufügen eines Index kann die Leistung von Abfragen verbessern (Änderungen an der Tabelle können jedoch verlangsamt werden).

Sie sollten UNIQUE verwenden, wenn Sie die Werte in dieser Spalte (oder diesen Spalten) als eindeutig einschränken möchten, damit Versuche, doppelte Werte einzufügen, zu einem Fehler führen.

Ein PRIMARY KEY ist sowohl eine eindeutige Einschränkung als auch impliziert, dass die Spalte NICHT NULL ist. Es wird verwendet, um jeder Zeile eine Identität zu geben. Dies kann nützlich sein, um über eine Fremdschlüsseleinschränkung mit einer anderen Tabelle zu verknüpfen. Obwohl es für eine Tabelle nicht erforderlich ist, einen PRIMARY KEY zu haben, ist dies normalerweise eine gute Idee.


PRIMARY KEY wird verwendet, um jeder Zeile eine Identität zu geben? Erkläre meine Unwissenheit.
Hilfe

@needHELP: Es wird verwendet, um eine Zeile in Ihrer Tabelle eindeutig zu identifizieren. Wenn Sie beispielsweise eine bestimmte Zeile in Ihrer Tabelle löschen möchten, ist es hilfreich, eine Möglichkeit zu haben, sie eindeutig zu identifizieren, damit Sie nicht versehentlich die falsche Zeile löschen. Es ist auch nützlich, um sich mit einer anderen Tabelle zu verbinden, da diese indiziert ist.
Mark Byers

48

Der Primärschlüssel erlaubt keine NULLWerte, aber der eindeutige Schlüssel erlaubt NULLWerte.

Wir können nur einen Primärschlüssel in einer Tabelle deklarieren , aber eine Tabelle kann mehrere eindeutige Schlüssel haben (Spaltenzuweisung).


17

PRIMARY KEYUND UNIQUE KEYsind ähnlich, außer dass es unterschiedliche Funktionen hat. Der Primärschlüssel macht die Tabellenzeile eindeutig (dh es können nicht zwei Zeilen mit genau demselben Schlüssel vorhanden sein). Sie können nur 1 Primärschlüssel in einer Datenbanktabelle haben.

Eindeutiger Schlüssel macht die Tabellenspalte in einer Tabellenzeile eindeutig (dh keine Tabellenzeile 2 kann denselben exakten Wert haben). Sie können mehr als eine eindeutige Schlüsseltabellenspalte haben (im Gegensatz zum Primärschlüssel bedeutet dies, dass nur 1 Tabellenspalte in der Tabelle eindeutig ist).

INDEXschafft auch Einzigartigkeit. MySQL (Beispiel) erstellt eine Indizierungstabelle für die indizierte Spalte. Auf diese Weise ist es einfacher, den Tabellenzeilenwert abzurufen, wenn die Abfrage für diese indizierte Tabellenspalte abgefragt wird. Der Nachteil ist, dass MySQL bei vielen Aktualisierungen / Löschungen / Erstellungen die Indizierungstabellen verwalten muss (und dies kann ein Leistungsengpass sein).

Hoffe das hilft.


UNIQUE KEYKann auch sein , kann NULLaber PRIMARY KEYnicht sein NULL.
Rafay

10

Eindeutige Schlüssel: Die Spalten, in denen keine zwei Zeilen ähnlich sind

Primärschlüssel: Sammlung einer Mindestanzahl von Spalten, mit denen jede Zeile in einer Tabelle eindeutig identifiziert werden kann (dh keine zwei Zeilen sind in allen Spalten, aus denen der Primärschlüssel besteht, ähnlich). Eine Tabelle kann mehr als einen Primärschlüssel enthalten. Wenn ein eindeutiger Schlüssel vorhanden ist, handelt es sich um einen Primärschlüssel (nicht "den" Primärschlüssel) in der Tabelle. Wenn kein eindeutiger Schlüssel vorhanden ist, sind mehr als ein Spaltenwert erforderlich, um eine Zeile zu identifizieren, wie (Vorname, Nachname, Vatername, Muttername) in einigen Tabellen den Primärschlüssel darstellen kann.

Index: Wird zur Optimierung der Abfragen verwendet. Wenn Sie die Ergebnisse mehrmals anhand einer Spalte suchen oder sortieren (z. B. werden die Schüler meistens nach Namen und nicht nach ihrer Rollennummer durchsucht), kann dies optimiert werden, wenn alle Spaltenwerte " indiziert "zum Beispiel mit einem binären Baumalgorithmus.


Ich denke, Sie wollten damit sagen, dass es nur eine PK in einer Tabelle geben kann
Răzvan Flavius ​​Panda

7

Primärschlüssel - Wir können nur einen Primärschlüssel für eine Tabelle in eine Tabelle einfügen und diese Spalte nicht leer lassen, wenn wir die Werte in die Tabelle eingeben.

Eindeutiger Schlüssel - Wir können mehr als einen eindeutigen Schlüssel in eine Tabelle einfügen und diese Spalte möglicherweise leer lassen, wenn wir die Werte in die Tabelle eingeben. Spalte nehmen eindeutige Werte (nicht gleich) an, wenn wir Primär- und eindeutigen Schlüssel angewendet haben.


Tabelle haben nur einen Primärschlüssel, aber eindeutige Schlüssel sind mehr als einer.
VIKASH

6

Der Primärschlüssel wird verwendet, um mit verschiedenen Tabellen zu arbeiten. Dies ist die Grundlage für relationale Datenbanken. Wenn Sie eine Buchdatenbank haben, ist es besser, 2 Tabellen zu erstellen - 1) Bücher und 2) Autoren mit dem INT-Primärschlüssel "id". Dann verwenden Sie id in Büchern anstelle des Autorennamens.

Der eindeutige Schlüssel wird verwendet, wenn Sie keine wiederholten Einträge wünschen. Beispielsweise haben Sie möglicherweise einen Titel in Ihrer Buchtabelle und möchten sicherstellen, dass für jeden Titel nur ein Eintrag vorhanden ist.


2

Einzigartiger Schlüssel :

  1. Mehr als ein Wert kann null sein.
  2. Keine zwei Tupel können in einem eindeutigen Schlüssel dieselben Werte haben.
  3. Ein oder mehrere eindeutige Schlüssel können zu einem Primärschlüssel kombiniert werden, nicht jedoch umgekehrt.

Primärschlüssel

  1. Kann mehr als einen eindeutigen Schlüssel enthalten.
  2. Stellt eindeutig ein Tupel dar.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.