Datenbank/Primärschlüssel nachträglich setzen
Nicht jede Tabelle einer Datenbank braucht tatsächlich einen Primärschlüssel, gleichwohl sollten Sie stets einen Primärschlüssel vorsehen. Wenn Sie vergessen haben, einen Primärschlüssel zu setzen, können Sie ihn auch nachträglich setzen.
Voraussetzung
1. Die Tabelle enthält noch keinen Primärschlüssel.
2. Die Spalte, die zum Primärschlüssel werden soll, darf keine doppelten Werte enthalten. Das können Sie mit folgender Abfrage prüfen:
SELECT `id`, count(`id`) as `anzahl`
FROM `tabelle` GROUP BY `id` HAVING `anzahl` > 1;
Es werden von allen Datensätzen der Tabelle die Werte aus der Spalte id
gesucht, nach diesen gruppiert und ausgegeben, falls es mehr als einen Datensatz mit diesem Wert gibt.
- Datenbank/SQL-Grundlagen#GROUP_BY_-_Bilden_von_Teilmengen
- Datenbank/SQL-Grundlagen#HAVING_-_Filtern_von_aggregierten_Werten
Gibt es für diese Abfrage kein Ergebnis, so ist die Voraussetzung erfüllt, und Sie können (hier die Spalte `id`) nachträglich zum Primärschlüssel erklären.
Primärschlüssel anlegen
Wenn es in der Tabelle bereits eine Spalte gibt, die zum Primärschlüssel werden soll, kann diese mit dieser Abfrage geändert werden:
ALTER TABLE `tabelle`
CHANGE `id` `id` INT unsigned NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);
Damit wird die Spalte id
in einen numerischen Typ gewandelt, bekommt gleichzeitig die Eigenschaft AUTO_INCREMENT
– damit neue Zeilen automatisch eine eindeutige ID bekommen – und die Spalte wird als Primärschlüssel definiert. Sollte bereits eine geeignete numerische Spalte existieren oder eine Spalten mit einem anderen Datentyp als Primärschlüssel verwendet werden, kann der CHANGE-Teil in der Abfrage auch weggelassen werden:
ALTER TABLE `tabelle`
ADD PRIMARY KEY `id` (`id`);
Damit wird ohne eine Änderung aus der Spalte id
ein Primärschlüssel.
Sollte eine als Primärschlüssel geeignete Spalte ganz fehlen, lässt sich eine solche Spalte auch neu anlegen:
ALTER TABLE `tabelle`
ADD `id` INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
Die so angelegte Spalte hat die gleichen Eigenschaften wie die über die Abfrage oben geänderte Spalte. Durch das Schlüsselwort FIRST
wird die neue Spalte als erste Spalte der Tabelle angelegt, mit AFTER `spalte`
würde sie hinter der Spalte spalte
angelegt werden.
Weblinks
- Forum: nachträglich PRIMARY KEY setzen
- MySQL-Handbuch: weiterführende Informationen zu ALTER TABLE-Abfragen finden Sie im gleichnamigen Kapitel, der Syntax zum Anlegen und Ändern von Spalten wird im Kapitel zu CREATE TABLE-Abfragen behandelt.