Der Unterschied zwischen KEY, PRIMARY KEY, UNIQUE KEY und INDEX in MySQL

Der Unterschied zwischen KEY, PRIMARY KEY, UNIQUE KEY und INDEX in MySQL

Das im Titel angesprochene Problem lässt sich schrittweise zerlegen und lösen. In MySQL sind KEY und INDEX Synonyme. Dann kann diese Frage auf den Unterschied zwischen PRIMARY KEY, UNIQUE KEY und INDEX vereinfacht werden. Dies sind genau die Unterteilungen von Indizes: Primärschlüsselindex, eindeutiger Index und gewöhnlicher Index (INDEX).

Verwenden Sie INDEX, um das Lesen von Daten aus der Datenbank zu beschleunigen. INDEX wird normalerweise zu den Spalten der Klauseln JOIN, WHERE und ORDER BY hinzugefügt.

Beim Erstellen eines Index müssen Sie sicherstellen, dass der Index auf die SQL-Abfrageanweisung angewendet wird (normalerweise als Bedingung der WHERE-Klausel). Tatsächlich ist der Index auch eine Tabelle, die den Primärschlüssel und die Indexfelder speichert und auf die Datensätze der Entitätstabelle verweist.

Indizes haben jedoch auch ihre Nachteile: Obwohl Indizes die Abfragegeschwindigkeit erhöhen, verlangsamen sie Tabellenaktualisierungen wie INSERT, UPDATE und DELETE. Denn beim Aktualisieren einer Tabelle muss MySQL nicht nur die Daten, sondern auch die Indexdatei speichern.

Der Unterschied zwischen KEY und INDEX in MySQL

KEY ist normalerweise ein Synonym für INDEX. PRIMARY KEY kann auch nur als KEY angegeben werden, wenn das Schlüsselwortattribut PRIMARY KEY in der Spaltendefinition angegeben ist. Dies geschieht aus Kompatibilitätsgründen mit anderen Datenbanksystemen. PRIMARY KEY ist ein eindeutiger SCHLÜSSEL. In diesem Fall müssen alle Schlüsselwortspalten als NOT NULL definiert werden. Wenn die Spalten nicht explizit als NOT NULL definiert sind, sollte MySQL sie implizit definieren.

KEY oder Schlüsselwert ist Teil der relationalen Modelltheorie, wie beispielsweise Primärschlüssel (PRIMARY KEY), Fremdschlüssel (Foreign KEY) usw., die zur Prüfung der Datenintegrität und Eindeutigkeitsbeschränkung usw. verwendet werden. INDEX befindet sich auf der Implementierungsebene. Sie können beispielsweise einen Index für jede Spalte in einer Tabelle erstellen. Wenn sich die indizierte Spalte dann in der Where-Bedingung einer SQL-Anweisung befindet, können Sie Daten schnell finden und abrufen. Was UNIQUE INDEX betrifft, handelt es sich lediglich um einen INDEX-Typ. Das Erstellen eines UNIQUE INDEX gibt an, dass die Daten in dieser Spalte nicht wiederholt werden können. Ich vermute, dass MySQL weitere spezielle Optimierungen für Indizes vom Typ UNIQUE INDEX vornehmen kann.

Daher muss beim Entwerfen einer Tabelle der SCHLÜSSEL nur auf Modellebene vorhanden sein, und wenn eine Abfrageoptimierung erforderlich ist, können Indizes für die relevanten Spalten erstellt werden.

SCHLÜSSEL

KEY ist die physische Struktur der Datenbank und hat zwei Bedeutungen. Eine davon ist Constraint, bei dem es darum geht, die strukturelle Integrität der Datenbank einzuschränken und zu regulieren; die andere ist Index, der bei der Abfrage hilft.
•Der Primärschlüssel hat zwei Funktionen. Eine davon ist die Einschränkung, die verwendet wird, um den Primärschlüssel und die Eindeutigkeit des Speichers zu regeln, aber auch, um einen Index für diesen Schlüssel zu erstellen.
•Der eindeutige Schlüssel hat ebenfalls zwei Funktionen. Zum einen dient er als Constraint, der die Eindeutigkeit der Daten regelt, zum anderen aber auch einen Index auf diesem Schlüssel erstellt.
•Fremdschlüssel haben ebenfalls zwei Funktionen: Die eine ist die Einschränkungsfunktion, die die referenzielle Integrität der Daten regelt, gleichzeitig wird aber auch ein Index auf diesem Schlüssel erstellt;

Es ist ersichtlich, dass der Schlüssel sowohl die Bedeutung einer Einschränkung als auch eines Index hat.

INDEX

INDEX ist ebenfalls eine physische Struktur der Datenbank, dient jedoch nur als Hilfsabfrage und nimmt bei seiner Erstellung zusätzlichen Speicherplatz ein. Indizes werden in Präfixindizes, Volltextindizes usw. unterteilt. Ein Index ist nur ein Index und schränkt das Verhalten des indizierten Felds nicht ein.

Der Unterschied zwischen PRIMARY KEY und UNIQUE KEY

PRIMARY KEYs und UNIQUE KEYs sind ähnlich. Ein PRIMARY KEY ist normalerweise eine einzelne Spalte, kann aber auch mehrere Spalten umfassen und bestimmt normalerweise eine Datenzeile. Eine Tabelle kann nur einen PRIMÄRSCHLÜSSEL, aber mehrere EINDEUTIGE SCHLÜSSEL haben. Wenn eine Spalte als UNIQUE KEY festgelegt ist, können keine zwei Zeilen dieselben Daten in der Spalte haben. PRIMARY KEY lässt keine NULL-Werte zu, UNIQUE KEY jedoch schon.

`ALTER TABLE table_name ADD PRIMARY KEY(column_name, …)

Zusammenfassend die Ähnlichkeiten:
• PRIMARY KEY und UNIQUE KEY werden verwendet, um sicherzustellen, dass die Daten in der Spalte original sind
• Sie können eine oder mehrere Spalten hinzufügen

Unterschiede:
• Eine Tabelle kann nur einen PRIMARY KEY haben, aber mehrere UNIQUE KEYs

PRIMARY KEY kann keine Nullwerte haben, UNIQUE KEY jedoch schon. Wenn eine oder mehrere Spalten des PRIMARY KEY NULL sind, werden die Spalten beim Hinzufügen des PRIMARY KEY automatisch auf NOT NULL geändert. UNIQUE KEY stellt keine Anforderungen an Spalten und wird durch Verweisen auf den Index implementiert. Wenn die eingefügten Werte alle NULL sind, werden gemäß dem Indexprinzip alle NULL-Werte nicht im Index aufgezeichnet. Daher können beim Einfügen aller NULL-Werte Duplikate auftreten, andere doppelte Werte können jedoch nicht eingefügt werden.

alter table t add constraint uk_t_1 UNIQUE(a,b); insert into t(a,b) values ​​​​(null,1); # kann nicht wiederholt werden insert into t(a,b) values ​​​​(null,null); # kann wiederholt werden

In MySQL hat MySQL für eine PRIMARY KEY-Spalte automatisch einen UNIQUE INDEX erstellt, sodass es nicht nötig ist, erneut einen Index dafür zu erstellen.

Eine Erklärung im Internet zu PRIMARY KEY und UNIQUE INDEX:

Beachten Sie, dass „PRIMARY“ PRIMARY KEY und nicht INDEX heißt.
KEY ist etwas auf der logischen Ebene, beschreibt Ihr Tabellen- und Datenbankdesign (erzwingt also referenzielle Integrität …)
INDEX ist etwas auf der physischen Ebene, das hilft, die Zugriffszeit für Tabellenoperationen zu verbessern.
Hinter jedem PK wird (normalerweise) ein UNIQUE INDEX (automatisch) erstellt.

Vorgangsindex

Das Erstellen eines Indexes beansprucht Speicherplatz für Indexdateien.
CREATE INDEX IndexName ON mytable(Benutzername(Länge));

Beim Typ CHAR oder VARCHAR kann die Länge kleiner sein als die tatsächliche Länge des Felds; beim Typ BLOB oder TEXT muss die Länge angegeben werden.

Erstellen Sie beim Erstellen einer Tabelle einen Index:

TABELLE ERSTELLEN meineTabelle( 
 ID INT NICHT NULL,  
 Benutzername VARCHAR(15) NOT NULL,
 INDEX [INDEXName] (Benutzername (Länge)) 
);

Löschen eines Indexes


DROP INDEX [INDEXName] ON mytable;

Das könnte Sie auch interessieren:
  • Praktisches Spring-Beispiel für die Verwendung von Qualifier-Annotationen
  • Zusammenfassung der Lösungen für PHP-Primärskript unbekannt
  • Lösung für den Fehler „Mehrere Primärschlüssel definiert“ in MySQL
  • Missverständnisse über SQLSERVER Clustered Index und Primärschlüssel
  • mysql #1062 –Doppelter Eintrag ''1'' für Schlüssel ''PRIMARY''
  • Kann „Create Index“ in MySQL einen Primärschlüssel erstellen?
  • Analyse des Spring-Annotationsprinzips @Primary und @Qualifier

<<:  So öffnen Sie den Port in Centos7

>>:  Beispiele für die Verwendung von React Ref

Artikel empfehlen

Implementierungscode für mehrzeilige Textkomponenten der Vue-Faltanzeige

Faltdisplay mit mehrzeiligem Textbaustein Falten ...

js realisiert 3D-Soundeffekte durch audioContext

In diesem Artikel wird der spezifische Code von j...

So verwenden Sie einen Docker-Container für den Zugriff auf das Host-Netzwerk

Vor Kurzem wurde ein System bereitgestellt, das n...

Detaillierte Erläuterung der MySQL-Datumszeichenfolgen-Zeitstempelkonvertierung

Die Konvertierung zwischen Zeit, Zeichenfolge und...

So erstellen Sie einen Redis-Cluster mit Docker

Inhaltsverzeichnis 1. Erstellen Sie ein Redis-Doc...

Beispielcode für die Codevorlage für die Linux C-Protokollausgabe

Vorwort Dieser Artikel stellt hauptsächlich den r...

Anwendungshandbuch für chinesische WEB-Schriftarten

Die Verwendung von Schriftarten im Web ist sowohl ...

Navicat-Verbindung MySQL Fehlerbeschreibungsanalyse

Inhaltsverzeichnis Umfeld Version der virtuellen ...

vue.js Router verschachtelte Routen

Vorwort: Manchmal ist der Hauptteil einer Route d...

So stellen Sie Go-Webanwendungen mit Docker bereit

Inhaltsverzeichnis Warum brauchen wir Docker? Bei...

Analyse des Prinzips und der Verwendung von MySQL-Benutzerdefinierten Funktionen

Dieser Artikel veranschaulicht anhand von Beispie...