Grundkurs SQL

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.