In MySQL hat jeder Spaltentyp ein "implizite Vorgabe "Wert .
Wenn eine NOT NULL-Spalte zu einer Tabelle hinzugefügt , und kein explizites DEFAULT angegeben ist, wird der implizite Standardwert verwendet, um die neuen Spaltendaten aufzufüllen. Ähnliche Regeln gelten, wenn der DEFAULT-Wert angegeben ist.
Daher erzeugt die ursprüngliche DDL die gleichen Ergebnisse wie:
-- After this, data will be the same, but schema has an EXPLICIT DEFAULT
ALTER TABLE t ADD c varchar(10) NOT NULL DEFAULT ''
-- Now we're back to the IMPLICIT DEFAULT (MySQL stores NULL internally)
ALTER TABLE t ALTER c DROP DEFAULT
Die "strengen" Moduseinstellungen wirken sich auf DML-Anweisungen aus, die sich auf Standardwerte verlassen, wirken sich jedoch nicht auf die implizite Standardverwendung aus, wenn die Spalte hinzugefügt wird.
Hier ist ein sqlfiddle-"Beweis" dieser strikte Modus gilt nicht für die ALTER TABLE .. ADD-Anweisung.
Dies ist eine MySQL-Funktion. Andere Engines, wie SQL Server, erfordern eine explizite DEFAULT-Einschränkung (oder eine NULL-Spalte) für solche Schemaänderungen.