2012-06-06 5 views
56

jemand über den Zweck der PRIMARY KEY, UNIQUE KEY und KEY erklären können, wenn sie es in einem einzigen CREATE TABLE Aussage zusammen in MySQL?MySQL - Bedeutung von „Primärschlüssel“, „UNIQUE KEY“ und „KEY“, wenn sie zusammen verwendet werden, während der Erstellung einer Tabelle

CREATE TABLE IF NOT EXISTS `tmp` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `uid` varchar(255) NOT NULL, 
    `name` varchar(255) NOT NULL, 
    `tag` int(1) NOT NULL DEFAULT '0', 
    `description` varchar(255), 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `uid` (`uid`), 
    KEY `name` (`name`), 
    KEY `tag` (`tag`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 ; 

Wie konvertiere ich diese Abfrage in MySQL?

+3

bezogen werden: [? MySQL des KEY Schlüsselwort] (http://stackoverflow.com/q/924265/697449) Grundsätzlich 'KEY' ist gleichbedeutend mit' INDEX'. –

Antwort

80

Ein Schlüssel ist nur ein normaler Index zu sehen. Ein Weg über die Vereinfachung ist es, es wie einen Kartenkatalog in einer Bibliothek zu sehen. Es weist MySQL in die richtige Richtung.

Ein eindeutiger Schlüssel wird auch für eine verbesserte Suchgeschwindigkeit verwendet, hat aber die Einschränkung, dass es keine doppelten Einträge geben kann (es gibt keine zwei x und y, wobei x nicht y und x == y ist).

Die manual erklärt es wie folgt:

ein eindeutiger Index erzeugt eine Beschränkung derart, dass alle Werte im Index unterscheiden müssen. Ein Fehler tritt auf, wenn Sie versuchen, eine neue Zeile mit einem Schlüsselwert hinzuzufügen, der einer vorhandenen Zeile entspricht. Diese Einschränkung gilt nicht für NULL-Werte mit Ausnahme der BDB-Speicher-Engine. Für andere Engines erlaubt ein UNIQUE-Index mehrere NULL-Werte für Spalten, die NULL enthalten können. Wenn Sie einen Präfixwert für eine Spalte in einem UNIQUE-Index angeben, müssen die Spaltenwerte innerhalb des Präfixes eindeutig sein.

Ein Primärschlüssel ist ein "spezieller" eindeutiger Schlüssel. Es ist im Grunde ein eindeutiger Schlüssel, außer dass es verwendet wird, um etwas zu identifizieren.

Das Handbuch erklärt, wie Indizes allgemein verwendet werden: here.

In MSSQL sind die Konzepte ähnlich. Es gibt Indizes, eindeutige Einschränkungen und Primärschlüssel.

Ungeprüfte, aber ich glaube, das MSSQL entspricht:

CREATE TABLE tmp (
    id int NOT NULL PRIMARY KEY IDENTITY, 
    uid varchar(255) NOT NULL CONSTRAINT uid_unique UNIQUE, 
    name varchar(255) NOT NULL, 
    tag int NOT NULL DEFAULT 0, 
    description varchar(255), 
); 

CREATE INDEX idx_name ON tmp (name); 
CREATE INDEX idx_tag ON tmp (tag); 

Edit: der Code oben getestet wird, korrekt zu sein; Ich vermute jedoch, dass es eine viel bessere Syntax dafür gibt. Eine Weile, seit ich SQL Server benutzt habe, und anscheinend habe ich ziemlich viel vergessen :).

+1

Große Erklärung! Der Code funktioniert auch gut. Vielen Dank! – sura2k

+0

Kein Problem. Froh, dass ich helfen konnte :). – Corbin

+0

Danke, dass Sie mich auf den richtigen Platz im Handbuch hingewiesen haben! – ptpaterson

3

Die eindeutigen und primären Schlüssel von MySQL dienen zur Identifizierung von Zeilen. Es kann nur einen Primärschlüssel in einer Tabelle geben, aber einen oder mehrere eindeutige Schlüssel. Der Schlüssel ist nur Index.

für weitere Informationen können Sie http://www.geeksww.com/tutorials/database_management_systems/mysql/tips_and_tricks/mysql_primary_key_vs_unique_key_constraints.php überprüfen

mysql konvertieren dies zum MSSQL versuchen und http://gathadams.com/2008/02/07/convert-mysql-to-ms-sql-server/

+0

@Paul Bellora, deine Erklärung ist klarer als meine. Groß. – Wazan

+0

Nun, ich habe nur die Dokumente zitiert, und ich habe den zweiten Teil über die Konvertierung nicht gesehen. Ich denke, Corbins Antwort fasst es gut zusammen. –

23

einfach zu den anderen Antworten hinzuzufügen, gibt die documentation diese Erklärung:

  • KEY normalerweise für INDEX ein Synonym ist. Das Schlüsselattribut PRIMARY KEY kann auch nur als KEY angegeben werden, wenn es in einer Spaltendefinition angegeben wird.Diese wurde für die Kompatibilität mit anderen Datenbanksystemen implementiert.

  • Ein UNIQUE Index erzeugt eine Einschränkung, sodass alle Werte im Index eindeutig sein müssen. Ein Fehler tritt auf, wenn Sie versuchen, eine neue Zeile mit einem Schlüsselwert hinzuzufügen, der einer vorhandenen Zeile entspricht. Für alle Engines erlaubt ein UNIQUE Index mehrere NULL Werte für Spalten, die NULL enthalten können.

  • Ein PRIMARY KEY ist ein eindeutiger Index, bei dem alle Schlüsselspalten als NOT NULL definiert werden müssen. Wenn sie nicht explizit als NOT NULL deklariert sind, werden sie von MySQL so implizit (und stillschweigend) deklariert. Eine Tabelle kann nur eine PRIMARY KEY haben. Der Name einer PRIMARY KEY ist immer PRIMARY, die somit nicht als der Name für jede andere Art von Index verwendet werden kann.

+0

Danke euch allen! – sura2k

+0

Kompatibilität mit anderen Datenbanksystemen? Welches andere DBMS benutzt das Wort "KEY" für etwas, das überhaupt kein Schlüssel ist (ein Index)? Ich hatte immer angenommen, dass MySQL nur ein bisschen seltsam ist - und dass die Autoren von MySQL nicht wissen, was ein Schlüssel ist :) – sqlvogel