Einschränkungen (Auf Spalten)
Eine Einschränkung für Spalten innerhalb der Tabellen kennen wir bereits.
Es handelt sich um den "PRIMARY KEY
", durch den eine eindeutige Einschränkung für den Datensatz sichergestellt wird.
In den folgenden Zeilen beschäftigen wir uns mit anderen Einschränkungen, die wir in SQL nutzen können.
Info!
Tabellen können nicht doppelt angelegt werden.
Sollte auf die bestehende Tabelle "kleidung" eine neue Tabelle mit dem gleichen Name folgen, kann die Datenbank diese nicht anlegen, weil die eindeutige Zuweisung fehlt. Zum Rumprobieren entweder einen anderen Tabellenname wie "kleidung1", "kleidung2", "kleidung3" usw. vergeben oder die alte Tabelle aus der Datenbank löschen, um eine neue mit den Namen "kleidung" erstellen zu können.
NOT NULL
Mit dem Schlüsselwortpaar "NOT NULL
" sind wir in der Lage, beim Anlegen der Tabelle bestimmte Felder als Pflichtfelder zu kennzeichnen.
Das bedeutet, dass beim Erstellen der Datensätze die mit "NOT NULL
" definierten Spalten mit einem gültigen Wert beschrieben werden müssen.
Spalten, die nicht mit "NOT NULL
" definiert werden, sind automatisch auf "NULL
" gesetzt und können dadurch undefinierte Werte aufnehmen.
Im Beispiel geben wir an, dass die Tabellenspalte: "artikelbezeichnung" ein Pflichtfeld sein wird.
CREATE TABLE kleidung (
artikelnummer INT PRIMARY KEY,
artikelbezeichnung VARCHAR(50) NOT NULL,
farbe VARCHAR(50),
produktionsdatum DATE,
preis DECIMAL(5,2)
);
Spalten, bei denen keine "NOT NULL
"-Einschränkung definiert wird, können durch fehlende Angaben bei "INSERT
" oder "UPDATE
"-Anweisungen undefiniert sein.
Undefinierte Datenfelder haben den Wert "NULL
".
UNIQUE
Die bereits bekannte Anweisung "PRIMARY KEY
" stellt sicher, dass ein Wert innerhalb einer Spalte einmalig vergeben ist.
Sehr ähnlich funktioniert die "UNIQUE
"-Einschränkung, mit der auch eindeutige Werte für die Spalte pro Datensatz bestimmt werden können.
Im Beispiel werden wir angeben, dass die Spalte "produktionsdatum" nicht zwei gleiche Werte erhält, praktisch vielleicht unsinnig aber für ein Beispiel ausreichend.
CREATE TABLE kleidung (
artikelnummer INT PRIMARY KEY,
artikelbezeichnung VARCHAR(50) NOT NULL,
farbe VARCHAR(50),
produktionsdatum DATE UNIQUE,
preis DECIMAL(5,2)
);
Wenn eine Spalte, eine "NOT NULL
" und eine "UNIQUE
"-Einschränkung bekommt, so wird zuerst die "NOT NULL
"-Einschränkung und dahinter die "UNIQUE
"-Einschränkung geschrieben.
spaltenname INT NOT NULL UNIQUE
DEFAULT
Mit der Einschränkung "DEFAULT
" können wir einen bestimmten Wert vordefinieren.
Sollte bei "INSERT
" oder "UPDATE
"-Anweisungen kein (neuer) Wert für die Spalte definiert sein, so wird der Wert verwendet, der hinter dem Schlüsselwort "DEFAULT
" geschrieben steht.
Im Beispiel werden wir für die Spalte "preis" den vordefinierten Wert "999.99" verwenden. Jedes Mal, wenn kein Wert für die Spalte "preis" angegeben wird, verwendet die Datenbank den vordefinierten Wert und speichert diesen im Datenfeld ab.
CREATE TABLE kleidung (
artikelnummer INT PRIMARY KEY,
artikelbezeichnung VARCHAR(50) NOT NULL,
farbe VARCHAR(50),
produktionsdatum DATE UNIQUE,
preis DECIMAL(5,2) DEFAULT 999.99
);
Achtung!
UNIQUE und DEFAULT nicht kombinieren!
Die beiden Einschränkungen "UNIQUE
" und "DEFAULT
" unterscheiden sich funktional und sind daher nicht miteinander kombinierbar.
Eine Spalte sollte nur einen der beiden Einschränkungen zugewiesen bekommen.
CHECK
Mit der "CHECK
"-Einschränkung können wir sogenannte Plausibilitätsprüfungen für Spalten festlegen.
Dabei werden mehrere Begriffe angegeben, die als Wert für die Spalte gelten dürfen.
Die Datenbank prüft bei "INSERT
" und "UPDATE
"-Anweisungen, ob der übergebene Wert mit einem Begriff hinter dem "UPDATE
"-Schlüsselwort übereinstimmt.
Die Begriffe, die als gültige Werte angegeben werden, werden in einem runden Klammerpaar geschrieben.
Bei der Prüfung mehrerer Bedingungen verwenden wir die logischen Operatoren "OR
" und "AND
".
Die Spalte "farbe" bekommt jetzt eine gewisse Farbpalette zugewiesen.
Bei "INSERT
" und "UPDATE
"-Anweisungen werden die Werte auf Übereinstimmung geprüft.
CREATE TABLE kleidung (
artikelnummer INT PRIMARY KEY,
artikelbezeichnung VARCHAR(50) NOT NULL,
farbe VARCHAR(50) CHECK (farbe='Blau' OR farbe='Rot' OR farbe='Schwarz'),
produktionsdatum DATE UNIQUE,
preis DECIMAL(5,2) DEFAULT 999.99
);
Praktisches Beispiel
Zusammengefasst als PHP-Code sieht die Anfrage zum Erstellen und Eintragen der Daten in etwa so aus:
if ($db = mysqli_connect("localhost", "root", "", "training")) {
$anfrage = "CREATE TABLE kleidung (
artikelnummer INT PRIMARY KEY,
artikelbezeichnung VARCHAR(50) NOT NULL,
farbe VARCHAR(50) CHECK (farbe='Blau' OR farbe='Rot' OR farbe='Schwarz'),
produktionsdatum DATE UNIQUE,
preis DECIMAL(5,2) DEFAULT 999.99
)";
if (mysqli_query($db, $anfrage)) {
echo "Tabelle wurde angelegt. <br>";
} else {
echo "Fehler beim Anlegen der Tabelle! <br>";
}
$anfrage = "INSERT INTO kleidung (artikelnummer, artikelbezeichnung, farbe, produktionsdatum, preis)
VALUES (444555666, 'Socken', 'Schwarz', '2018-06-06', 3.95)";
if (mysqli_query($db, $anfrage)) {
echo "Artikel wurde angelegt. <br>";
} else {
echo "Fehler beim Anlegen des Artikels! <br>";
}
}
mysqli_close($db);
Weiter mit Einschränkungen (CONSTRAINTS)