
Zuletzt aktualisiert am 30. März 2021 von Lars
In diesem Artikel erkläre ich euch die Grundlagen von CONSTRAINTS in MYSQL. Dazu gibt es natürlich bereits viele weitere Artikel im Netz. Beim Probieren fehlten mir aber oft einzelne entscheidende Hinweise. Vielfach wird in den Beispielen im Netz das CONSTRAINT innerhalb der CREATE TABLE-Anweisung erstellt. Existiert die Tabelle schon, oder läuft sonst was schief, hat das aber zur Folge, dass das CONSTRAINT nicht mehr angelegt wird. Ich empfehle euch daher unbedingt, das CONSTRAINT innerhalb einer ALTER TABLE Anweisung anzulegen.
Was sind CONSTRAINTS?
• CONSTRAINTS in MySQL (und anderen Datenbanken) sind Vorschriften, was in einer Tabellenspalte stehen darf.
• Häufig werden sie verwendet, um Beziehungen zwischen mehreren Tabellen zu definieren
• Jedes CONSTRAINTS muss einen eindeutigen Namen erhalten.
• Wenn CONSTRAINTS für Beziehungen zwischen mehreren Tabellen verwendet werden, dann muss das verknüpften Element entweder einen Schlüssel haben oder "UNIQUE" definiert sein.
Beispiel - Beziehungen definieren
Ich selbst bin mit der SQL-Syntax wenig vertraut. Ich klicke mir meine Datenbank in der Regel zusammen (meist in phpMySQL). Dort kann man das Ergebnis dann auch exportieren und erhält im Ergebnis die SQL-Syntax. Hier die abgespeckte, funktionierende Variante:
Schritt 1: Tabelle "name" erstellen
CREATE TABLE IF NOT EXISTS `name` ( `adrnr` int(11) PRIMARY KEY AUTO_INCREMENT NOT NULL, `vorname` varchar(50) DEFAULT NULL, `nachname` varchar(50) DEFAULT NULL, `plz` varchar(4) DEFAULT NULL ) ;
Dies ist eine reduzierte Adresstabelle. Wir verwenden eine automatisch fortlaufende (AUTO_INCREMENT) Nummer als Primärschlüssel.
Schritt 2: Tabelle "plz" erstellen
CREATE TABLE IF NOT EXISTS `plz` ( `plz` varchar(4) PRIMARY KEY NOT NULL, `ort` varchar(50) DEFAULT NULL );
Schritt 3: In Tabelle "plz" plz auf UNIQUE setzen
ALTER TABLE `plz` ADD UNIQUE KEY `plz` (`plz`);
Damit später eine eindeutige Zuordnung möglich ist, darf es eine Postleitzahl "plz" nur einmal geben.
Schritt 4: CONSTRAINT - Verknüpfung setzen
ALTER TABLE `name` ADD CONSTRAINT `plz_ibfk_1` FOREIGN KEY (`plz`) REFERENCES `plz` (`plz`);
Hier setzen wir unser CONSTRAINT mit Namen plz_ibfk_1 auf den Schlüssel plz.
Ergebnis / Nutzen
Nachdem wir das ganze nun entsprechend aufgesetzt haben, können wir ein paar Orte in unsere Tabelle plz eingeben.



Wenn wir jetzt Daten in unserer Namenstabelle einfügen, wird uns automatische die entsprechende Auswahl angeboten:



Durch das CONSTRAINT können wir hier also keine anderen Wert als eine PLZ aus der plz-Tabelle verwenden.
phpMyAdmin Besonderheiten
phpMyAdmin brauche ich hauptsächlich für die Sicherung und das Zurückspielen von CMS-Datenbanken. Besonders gut kenne ich mich da nicht aus. Beim Herumspielen für diesen Artikel habe ich jedoch zwei für mich neue Dinge festgestellt:
Wie löscht man Indizes in phpMyAdmin?
Indizes kannst du löschen, indem Du eine Tabelle anwählst und unter der Tabelle auf den recht unscheinbaren Link "Indizes" klickst. Dann öffnet sich eine Liste mit den Indizes und du kannst diese über die Schaltfläche "Löschen" entfernen.



Grafischer Beziehungseditor in phpMyAdmin
Beziehungen kann man in phpMyAdmin auch grafisch editieren. Den Editor erreichst du, indem du die Datenbank aufrufst, Abfrage wählst und den Link Designer wählst.






Hallo, hier schreibt Lars. Dipl-Ing. Ingenieurinformatik (FH). Seit Jahrzehnten in der IT tätig. Geprüfter (und begeisterter) Webmaster. Ebenso begeisterter Windows-, Apple-, und Office-User. Ich schreibe über alle möglichen Themen rund um IT. Mehr über mich erfährst du hier: Über mich. Danke für deinen Besuch!