Die Klausel DEFAULT
in der Spezifikation
eines Datentyps gibt einen Vorgabewert für eine Spalte an. Mit
einer Ausnahme muss der Vorgabewert immer eine Konstante sein.
Funktionen oder Ausdrücke sind als Vorgaben nicht zulässig.
Das bedeutet, dass Sie beispielsweise als Vorgabewert einer
Datumsspalte nicht den Wert einer Funktion wie
value
NOW()
oder CURRENT_DATE
angeben dürfen. Die genannte Ausnahme besteht darin, dass Sie
CURRENT_TIMESTAMP
als Vorgabe für eine
TIMESTAMP
-Spalte festlegen können. Siehe
auch Abschnitt 11.3.1.1, „TIMESTAMP
-Eigenschaften ab MySQL 4.1“.
Für BLOB
- und
TEXT
-Spalten können keine Vorgaben
festgelegt werden.
Wenn eine Spaltendefinition keinen expliziten
DEFAULT
-Wert enthält, bestimmt MySQL diesen
wie folgt:
Wenn die Spalte NULL
als Wert annehmen kann,
wird sie mit einer expliziten DEFAULT
NULL
-Klausel definiert.
Kann die Spalte NULL
nicht als Wert annehmen,
dann definiert MySQL die Spalte ohne explizite
DEFAULT
-Klausel. Wenn bei der Dateneingabe
eine INSERT
- oder
REPLACE
-Anweisung keinen Wert für die Spalte
enthält, verarbeitet MySQL sie entsprechend dem zum
betreffenden Zeitpunkt gültigen SQL-Modus:
Wenn der strikte SQL-Modus nicht aktiviert ist, setzt MySQL die Spalte auf den impliziten Standardwert für den Datentyp der Spalte.
Ist der strikte Modus hingegen aktiv, dann erscheint bei transaktionssicheren Tabellen ein Fehler, und für die Anweisung wird ein Rollback durchgeführt. Bei nichttransaktionssicheren Tabellen erscheint ebenfalls ein Fehler; allerdings bleiben, wenn dies erst beim zweiten oder einem nachfolgenden Datensatz geschieht, zuvor eingefügte Datensätze erhalten.
Nehmen wir einmal an, eine Tabelle t
sei wie
folgt definiert:
CREATE TABLE t (i INT NOT NULL);
In diesem Fall hat i
keinen expliziten
Vorgabewert, d. h., im strikten Modus würde jede der folgenden
Anweisungen einen Fehler erzeugen, und es würde kein Datensatz
eingefügt. Wird der strikte Modus nicht verwendet, dann erzeugt
nur die dritte Anweisung einen Fehler; bei den ersten beiden
Anweisungen wird die implizite Vorgabe eingefügt, die dritte
Anweisung schlägt hingegen fehl, weil
DEFAULT(i)
keinen Wert erzeugen kann:
INSERT INTO t VALUES(); INSERT INTO t VALUES(DEFAULT); INSERT INTO t VALUES(DEFAULT(i));
Siehe auch Abschnitt 5.2.5, „Der SQL-Modus des Servers“.
Sie können für eine gegebene Tabelle die Anweisung
SHOW CREATE TABLE
verwenden, um anzuzeigen,
welche Spalten eine explizite DEFAULT
-Klausel
aufweisen.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.