MySQL - Grundlagen - Schlüssel
1. Das grundsätzliche Problem
Damit eine Datenbank sauber funktioniert, müssen ihre Inhalte in sich stimmig sein. Da ich zu den Details später komme, will ich erst mal nur auf eine Sache hinweisen. Dazu greifen wir noch mal auf die kleine Adress-Datenbank zurück.
+-------+----------+--------------+-----+-----------+
|vorname|namen |strasse |plz |ort |
+-------+----------+--------------+-----+-----------+
|Claudia|Mustermann|Musterstraße 0|12345|Musterstadt|
|Dieter |Hinz |Hinzweg 0 |45678|Hinzdorf |
|Peter |Kunz |Kunzpfad 0 |67890|Kunzdorf |
+-------+----------+--------------+-----+-----------+
Anhand welches Kriteriums können wir nun einen Datensatz eindeutig identifizieren? Über den kompletten Namen? Nein, denn wir können nicht wissen, ob es nicht zum Beispiel irgendwo in Deutschland Leute mit demselben Namen gibt. Der Name, die Straße und der Ort? In inzestuösen Regionen innerhalb unseres schönen Landes werdet ihr auch da Probleme bekommen können. Gut vielleicht nicht praktisch, aber theoretisch(!) wäre es möglich. Und genau darum geht es.
2. Einfacher hochzählender Schlüssel in einem Feld
Beim Erstellen einer Tabelle weist man MySQL darauf hin, dass eine bestimmte Spalte vom Typ Ganzzahl ist und über folgende zusätzliche Eigenschaften verfügen soll:
NOT NULL
AUTO_INCREMENT
Zu den Details, speziell zu NULL
, komme ich später. Bis dato braucht ihr für das grundsätzliche Verständnis erst mal nur diese
Informationen. NOT NULL
bedeutet, dass immer etwas in das jeweilige Feld geschrieben wird. Da der Datentyp
eine Ganzzahl ist, wäre das also mindestens eine Null (eine echte, also 0). Um aber zu verhindern dass die immer wieder in ein Feld
geschrieben wird, gibt es AUTO_INCREMENT
.
Dabei passiert das. MySQL hält nach dem höchsten bereits existierenden Wert dieser Spalte Ausschau, zählt einen drauf und schreibt den Wert dann in das entsprechende Feld des neuen Datensatzes. Und der ist damit eindeutig zu identifizieren. Noch etwas. Darum muss man sich nicht selber kümmern, das wird ganz automatisch gemacht.
Das große Missverständnis
Viele Anfänger stören sich daran, dass beim Löschen von Datensätzen plötzlich Lücken bei der Zahlenreihenfolge entstehen. Das ist aber
ganz bewusst so vorgesehen, da ein Neusortieren der Zahlenwerte viel zu aufwendig ist. Besonders, wenn dann noch so genannte Relationen
ins Spiel kommen. Darum sehen dann Tabellen auch sehr schnell so aus (auf die Spalte id
achten):
+--+-------+----------+--------------+-----+-----------+
|id|vorname|namen |strasse |plz |ort |
+--+-------+----------+--------------+-----+-----------+
| 1|Claudia|Mustermann|Musterstraße 0|12345|Musterstadt|
| 5|Dieter |Hinz |Hinzweg 0 |45678|Hinzdorf |
| 9|Peter |Kunz |Kunzpfad 0 |67890|Kunzdorf |
+--+-------+----------+--------------+-----+-----------+
3. Schlüssel aus mehreren Feldern
Manchmal bietet es sich an, einen eindeutigen Schlüssel aus mehreren Feldern zu bilden, ohne dafür ein eigenes Feld mit den obigen Eigenschaften zu erstellen. Um das mal genauer zu erläutern, greife ich auf folgendes Beispiel zu. Eure Kontodaten! Ich hoffe, die sind noch nicht bei irgendeinem zweifelhaften Dienstleister gelandet ;-).
Damit zum Beispiel eine Überweisung (klingt besser als Abbuchung) auf euer Konto erfolgen kann, müssen zwei Dinge bekannt sein. Die eindeutige Bankleitzahl (BLZ) und die eindeutige Kontonummer. Und zwar in Kombination.
Hä?
Ja, genau. Hä! Ein BLZ ist immer eindeutig. Aber eine Kontonummer? Die nicht. Warum? Wegen der Länge. Meine zum Beispiel besteht aus 10 Ziffern. Das entspricht einem Wert im einstelligen Milliardenbereich. Da es weltweit mit Sicherheit mehr Konten gibt (besonders in der Schweiz), ist das mit der Eindeutigkeit so eine Sache. Aber zusammen mit der BLZ ist das todsicher.
+--------+----------+
|BLZ |Kto.-Nr. |
+--------+----------+
|30020012|2407745128|
|30025070|1509457845|
|30040020|2407745128|
+--------+----------+
4. Schlüsseltypen
Unique
Hier hätten wir zunächst mal den "eindeutigen" Schlüssel. Er zeichnet sich dadurch aus, dass die Werte in einer(!)
Spalte eindeutig sind. Es ist also nicht möglich darin doppelte Einträge anzulegen. Ein schönes Beispiel ist obige Bankverbindung. Man
belegt die BLZ
mit einem UNIQUE KEY
. So ergibt sich aus der Kombination mit der Kontonummer (Kto-Nr.
)
ein eindeutiger Schlüssel.
Primary
Der Primärschlüssel unterscheidet sich vom eindeutigen dadurch, dass der KEY
einzigartig ist und nicht der Wert. Im Klartext
bedeutet es, dass eine Spalte mit UNIQUE KEY
einmalig den Wert NULL
haben darf, bei PRIMARY KEY
dagegen nicht. Der Unterschied ist ehrlich gesagt marginal. Daher werde ich auf die Feinheiten später eingehen. Hier geht es erst mal nur
ums Prinzip.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt