it-swarm.com.de

MySQL - Bedeutung von "PRIMARY KEY", "UNIQUE KEY" und "KEY", wenn sie beim Erstellen einer Tabelle zusammen verwendet werden

Kann mir jemand erklären, wozu PRIMARY KEY, UNIQUE KEY und KEY, wenn es in einem einzigen CREATE TABLE Anweisung in MySQL?

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 nach MSSQL?

63
sura2k

Ein Schlüssel ist nur ein normaler Index. Ein Weg über die Vereinfachung besteht darin, es sich wie einen Kartenkatalog in einer Bibliothek vorzustellen. Es zeigt MySQL in die richtige Richtung.

Ein eindeutiger Schlüssel wird auch zur Verbesserung der Suchgeschwindigkeit verwendet, hat jedoch die Einschränkung, dass keine doppelten Elemente vorhanden sein dürfen (es gibt keine zwei x und y, wobei x nicht y und x == y ist).

Das Handbuch erklärt es wie folgt:

Ein UNIQUE-Index erstellt eine Einschränkung, sodass alle Werte im Index unterschiedlich sein müssen. Ein Fehler tritt auf, wenn Sie versuchen, eine neue Zeile mit einem Schlüsselwert hinzuzufügen, der mit einer vorhandenen Zeile übereinstimmt. Diese Einschränkung gilt nicht für NULL-Werte mit Ausnahme der BDB-Speicher-Engine. Für andere Suchmaschinen 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 genommen ein eindeutiger Schlüssel, außer dass er zur Identifizierung von etwas verwendet wird.

Das Handbuch erklärt, wie Indizes im Allgemeinen verwendet werden: hier .

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

Ungetestet, aber ich glaube, das MSSQL-Äquivalent ist:

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);

Bearbeiten: Der obige Code wurde auf Richtigkeit getestet. Ich vermute jedoch, dass es eine viel bessere Syntax dafür gibt. Es ist schon eine Weile her, dass ich SQL Server verwendet habe, und anscheinend habe ich einiges vergessen :).

90
Corbin

Um die anderen Antworten zu ergänzen, gibt die Dokumentation diese Erklärung:

  • KEY ist normalerweise ein Synonym für INDEX. Das Schlüsselattribut PRIMARY KEY Kann auch als nur KEY angegeben werden, wenn es in einer Spaltendefinition angegeben wird. Dies wurde aus Kompatibilitätsgründen mit anderen Datenbanksystemen implementiert.

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

  • Ein PRIMARY KEY Ist ein eindeutiger Index, in dem alle Schlüsselspalten als NOT NULL Definiert sein müssen. Wenn sie nicht explizit als NOT NULL Deklariert werden, deklariert MySQL sie so implizit (und stillschweigend). Eine Tabelle kann nur einen PRIMARY KEY Haben. Der Name eines PRIMARY KEY Ist immer PRIMARY und kann daher nicht als Name für einen anderen Indextyp verwendet werden.

27
Paul Bellora

MySQL Unique und Primary Keys 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 der Index.

weitere Informationen finden Sie unter http://www.geeksww.com/tutorials/database_management_systems/mysql/tips_and_tricks/mysql_primary_key_vs_unique_key_constraints.php

um Mysql nach Mssql zu konvertieren, versuchen Sie dies und lesen Sie http://gathadams.com/2008/02/07/convert-mysql-to-ms-sql-server/

3
Wazan