DEFAULT
erstellt wurde, ist der Wert, der in Abwesenheit eines expliziten Wert in einem Insert/Update-Anweisung eingefügt wird. Lassen Sie uns annehmen, haben Sie Ihre DDL nicht den NOT NULL
Einschränkung:
ALTER TABLE tbl ADD COLUMN col VARCHAR(20) DEFAULT "MyDefault"
Dann könnten Sie diese Anweisungen erteilen
-- 1. This will insert "MyDefault" into tbl.col
INSERT INTO tbl (A, B) VALUES (NULL, NULL);
-- 2. This will insert "MyDefault" into tbl.col
INSERT INTO tbl (A, B, col) VALUES (NULL, NULL, DEFAULT);
-- 3. This will insert "MyDefault" into tbl.col
INSERT INTO tbl (A, B, col) DEFAULT VALUES;
-- 4. This will insert NULL into tbl.col
INSERT INTO tbl (A, B, col) VALUES (NULL, NULL, NULL);
Alternativ können Sie auch DEFAULT
in UPDATE
Aussagen nach dem SQL-1992 Standard verwenden:
-- 5. This will update "MyDefault" into tbl.col
UPDATE tbl SET col = DEFAULT;
-- 6. This will update NULL into tbl.col
UPDATE tbl SET col = NULL;
Hinweis, nicht alle Datenbanken unterstützen alle diese SQL-Standardsyntaxen. Das Hinzufügen der NOT NULL
-Einschränkung führt zu einem Fehler mit den Anweisungen 4, 6
, während 1-3, 5
noch gültige Anweisungen sind. Also, um Ihre Frage zu beantworten:
Nein, NOT NULL
und DEFAULT
sind nicht redundant. Insbesondere NOT NULL
can have a tremendous impact on query performance as explained in this blog post here
Ich denke, das umformuliert werden sollte: "Die NOT NULL Einschränkung werden Sie diese Zeile nicht zulassen, aktualisiert werden, nachdem es mit Nullwert erstellt wurde" Of Kurszeilen mit NOT NULL-Spalten können aktualisiert werden, sie können einfach nicht mit null als Wert für diese Spalte aktualisiert werden. Außerdem: Ich nehme an, dass das Erstellen einer Zeile das Einfügen einer Zeile bedeutet.INSERT-Anweisungen dürfen keine Nullwerte für Spalten haben, die ebenfalls mit NOT NULL angegeben sind. – makrom