7.3.1 Referentielle Integrität – Primärschlüssel
Jede Tabelle besitzt eine Spalte oder zumindest eine Spaltenkombination, die eindeutig ist.
Das heißt, jeder vorhandene Datensatz der Tabelle ist eindeutig von den anderen
abgegrenzt. Diese Spalte bzw. Spaltenkombination wird als Primärschlüssel
bezeichnet und darf nie NULL
sein oder Werte enthalten, die doppelt innerhalb
der Tabelle auftauchen. (Bei einem zusammengesetzten Primärschlüssel darf keine
der am Primärschlüssel beteiligten Spalten einen NULL
-Wert beinhalten und die Kombination
beider Werte muss eindeutig sein.)
Doch wie wird der Primärschlüssel in SQL definiert?
Er ist ein CONSTRAINT
vom Typ PRIMARY KEY
und die Syntax hierfür lautet:
CREATE TABLE tabellenName ( Spalte_1 Datentyp NOT NULL, Spalte_2 Datentyp, ..., CONSTRAINT schluesselName PRIMARY KEY (Spalte_1) )
In den Klammern steht die Spalte oder Spaltenkombination, welche den Primärschlüssel eindeutig bestimmen soll. Der Schlüsselname kann frei gewählt werden und wird später eine wichtige Rolle beim Modifizieren der Tabellen spielen.
Betrachten wir wieder unsere Tabelle ort und ergänzen die Primärschlüsseldefinition:
[diese kann Anweisung getestet werden]CREATE TABLE ort
(
plz CHAR(5) NOT NULL DEFAULT '00000',
ort VARCHAR(50) NOT NULL,
vorwahl VARCHAR(12) NULL DEFAULT '000',
CONSTRAINT primaryKey_plz PRIMARY KEY (plz)
) ENGINE=INNODB
Warum ENGINE=INNODB? - Tabellenformate in MySQL
In MySQL gibt es neben dem Standard-Tabellentyp (MyISAM) noch weitere
Tabellentypen, die sich durch unterschiedliche Funktionalitäten unterscheiden.
Insbesondere das von Innobase Oy entwickelte Tabellenformat InnoDB bietet zahlreiche zusätzliche Funktionen gegenüber den MySQL Standard-Tabellen MyISAM sowie eine deutlich höhere Performance.
Fremdschlüssel - Constraints kann man prinzipiell bei allen Tabellentypen nutzen aber nur bei InnoDB -
Tabellen wird mit diesen auch die referentielle Integrität überwacht. Deshalb ist es wichtig, das
Tabellenformat auf InnoDB einzustellen, wenn man diese Funktionalität wünscht. Da wir im nächsten Punkt
genau dies wollen legen wir die Tabelle jetzt schon in diesem Format an.
Ohne Angabe des Tabellentypes wird vom MySQL-Server den Defaulttyp MyISAM verwendet.
(Der Defaulttyp kann kurch die Option default-table-type
in der MySQL-Konfigurationsdatei
eingestellt werden. In den meisten Fällen wird standardmäßig MyISAM eingestellt.)
Hinweis!
In der MySQL-Umgebung wird der Primärschlüssel durch unterstreichen gekennzeichnet.