Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL fügt eine NOT NULL-Spalte hinzu

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.