I MySQL har varje kolumntyp en "implicit standard " värde .
Om en INTE NULL-kolumn läggs till i en tabell , och ingen explicit DEFAULT anges, används det implicita standardvärdet för att fylla i den nya kolumndatan. Liknande regler gäller när DEFAULT-värdet anges.
Som sådan ger den ursprungliga DDL samma resultat som:
-- 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
Inställningarna för "strikt" läge påverkar DML-satser som förlitar sig på standardvärden, men påverkar inte den implicita standardanvändningen när kolumnen läggs till.
Här är ett sqlfiddle-"bevis" att strikt läge inte gäller för ALTER TABLE .. ADD-satsen.
Detta är en MySQL-funktion. Andra motorer, som SQL Server, kräver en explicit DEFAULT (eller NULL kolumn) begränsning för sådana schemaändringar.