DEFAULT
ist der Wert, der eingefügt wird, wenn in einer Einfüge- / Aktualisierungsanweisung kein expliziter Wert vorhanden ist. Nehmen wir an, Ihre DDL hatte nicht die NOT NULL
Einschränkung:
ALTER TABLE tbl ADD COLUMN col VARCHAR(20) DEFAULT 'MyDefault'
Dann könnten Sie diese Aussagen machen
INSERT INTO tbl (A, B) VALUES (NULL, NULL);
INSERT INTO tbl (A, B, col) VALUES (NULL, NULL, DEFAULT);
INSERT INTO tbl (A, B, col) DEFAULT VALUES;
INSERT INTO tbl (A, B, col) VALUES (NULL, NULL, NULL);
Alternativ können Sie auch DEFAULT
in UPDATE
Aussagen, nach dem SQL-1992 - Standard:
UPDATE tbl SET col = DEFAULT;
UPDATE tbl SET col = NULL;
Beachten Sie, dass nicht alle Datenbanken alle diese SQL-Standardsyntaxen unterstützen. Das Hinzufügen der NOT NULL
Einschränkung führt zu einem Fehler bei Anweisungen 4, 6
, solange diese 1-3, 5
noch gültig sind. Um Ihre Frage zu beantworten: Nein, sie sind nicht überflüssig.
Selbst mit einem Standardwert können Sie die Spaltendaten jederzeit mit überschreiben
null
.Mit der
NOT NULL
Einschränkung können Sie diese Zeile nicht aktualisieren, nachdem sie mitnull
Wert erstellt wurdequelle
Mein SQL-Lehrer sagte, wenn Sie sowohl einen
DEFAULT
Wert als auchNOT NULL
oder angebenNULL
,DEFAULT
sollte dies immer vorNOT NULL
oder ausgedrückt werdenNULL
.So was:
ALTER TABLE tbl ADD COLUMN col VARCHAR(20) DEFAULT "MyDefault" NOT NULL
ALTER TABLE tbl ADD COLUMN col VARCHAR(20) DEFAULT "MyDefault" NULL
quelle
Ich würde nicht sagen.
Wenn die Spalte Nullwerte akzeptiert, hindert Sie nichts daran, einen Nullwert in das Feld einzufügen. Soweit mir bekannt ist, gilt der Standardwert nur beim Erstellen einer neuen Zeile.
Wenn nicht null festgelegt ist, können Sie keinen Nullwert in das Feld einfügen, da dies einen Fehler auslöst.
Stellen Sie sich das als einen ausfallsicheren Mechanismus vor, um Nullen zu verhindern.
quelle
Nein, es ist nicht redundant. Zur erweiterten akzeptierten Antwort. Für eine Spalte,
col
die nullbar ist, kann Ehrfurcht NULL einfügen, selbst wenn DEFAULT definiert ist:CREATE TABLE t(id INT PRIMARY KEY, col INT DEFAULT 10); -- we just inserted NULL into column with DEFAULT INSERT INTO t(id, col) VALUES(1, NULL); +-----+------+ | ID | COL | +-----+------+ | 1 | null | +-----+------+
Oracle hat eine zusätzliche Syntax für ein solches Szenario eingeführt, um explizites NULL standardmäßig zu überschreiben
DEFAULT ON NULL
:CREATE TABLE t2(id INT PRIMARY KEY, col INT DEFAULT ON NULL 10); -- same as --CREATE TABLE t2(id INT PRIMARY KEY, col INT DEFAULT ON NULL 10 NOT NULL); INSERT INTO t2(id, col) VALUES(1, NULL); +-----+-----+ | ID | COL | +-----+-----+ | 1 | 10 | +-----+-----+
Hier haben wir versucht, NULL einzufügen, aber stattdessen den Standardwert zu erhalten.
db <> Geigen-Demo
quelle