Hauptmenü

Untermenü

Advanced SQL - Einstiegstutorial 1 - Feinheiten

1. Die Abschnitte

2. Tabellen erstellen

Sobald man eine Tabelle mit einem Fremdschlüssel auf eine andere anlegt, muss Letztere bereits vorhanden sein, sonst gibt es eine Fehlermeldung.

3. Tabellen löschen

Will man solche ins Nirwana befördern, so muss man auf Folgendes achten. Erst wird die Tabelle mit dem Fremdschlüssel gehimmelt und danach(!) erst die, auf die der FOREIGN KEY verweist. Ansonsten bekommt ihr auch hier einen entsprechenden Hinweis. Ein Tipp: mit HeidiSQL geht es trotzdem. Aber wie, das findet mal schön selber heraus.

4. Der Spaltentyp

... muss derselbe sein! Folgendes Beispiel kann daher nicht funktionieren, weil der Fremdschlüssel stufe in der Tabelle charakter über einen größeren Wertebereich verfügt, als die Spalte id in der Tabelle stufe.


CREATE TABLE stufe
(
  id TINYINT NOT NULL AUTO_INCREMENT,
  ...
) ENGINE=INNODB;

CREATE TABLE charakter
(
  ...
  stufe INT,
  FOREIGN KEY (stufeREFERENCES stufe(id)
    ON DELETE RESTRICT ON UPDATE CASCADE,
) ENGINE=INNODB;

5. Der Wertebereich

... muss ebenfalls identisch sein. Im folgenden Beispiel gilt für id in der Tabelle stufe ein UNSIGNED. Allerdings wurde das in der Tabelle charakter beim Fremdschlüssel stufe vergessen. Die Folge? Eine Fehlermeldung.


CREATE TABLE stufe
(
  id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  ...
) ENGINE=INNODB;

CREATE TABLE charakter
(
  ...
  stufe TINYINT,
  FOREIGN KEY (stufeREFERENCES stufe(id)
    ON DELETE RESTRICT ON UPDATE CASCADE,
) ENGINE=INNODB;

6. Ein Tipp

Nehmt euch mal den Lösungscode (rechts oben unter Daten) vor und spielt damit herum. Ändert die Reihenfolge beim Erstellen der Tabelle oder spielt mit den Spaltentypen und den Wertebereichen herum. Dann werdet ihr sehr schnell merken, auf was man so achten muss.

Ach ja

Die Sache mit dem Spaltentyp und Wertebereich läuft bidirektional ab. Man kann also nicht in der "Elterntabelle" mit einem TINYINT und in der "Kindtabelle" mit einem SMALLINT arbeiten. Dasselbe gilt auch für die Sache mit dem UNSIGNED.

Andere Spaltentypen

Außer Zahlen kann man zum Beispiel auch noch VARCHAR nehmen. Aber wer das macht, wird erschossen. Oder exmatrikuliert, je nach Werdegang. Arbeitet bei Fremdschlüsseln nur mit Zahlen. Am Besten mit eindeutigen IDs.

zurück zum vorherigen Abschnitt