sql >> Databasteknik >  >> RDS >> Mysql

MySQL lägg till en NOT NULL-kolumn

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.




  1. I Redshift/Postgres, hur räknar man rader som uppfyller ett villkor?

  2. Hur kan jag fixa MySQL-fel #1064?

  3. varför PG::UniqueViolation:FEL:dubblettnyckelvärde bryter mot unik begränsning?

  4. Fastnade i att bygga MySQL-fråga