sql >> Database teknologi >  >> RDS >> Mysql

MySQL tilføjer en IKKE NULL kolonne

I MySQL har hver kolonnetype en "implicit standard " værdi .

Hvis en IKKE NULL kolonne er føjes til en tabel , og der ikke er angivet nogen eksplicit DEFAULT, bruges den implicitte standardværdi til at udfylde de nye kolonnedata. Lignende regler gælder, når DEFAULT-værdien er angivet.

Som sådan producerer den originale DDL de samme resultater 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

Indstillingerne for "streng" tilstand påvirker DML-sætninger, der er afhængige af standardværdier, men påvirker ikke den implicitte standardbrug, når kolonnen tilføjes.

Her er et sqlfiddle-"bevis" at streng tilstand ikke gælder for ALTER TABLE .. ADD-sætningen.

Dette er en MySQL-funktion. Andre motorer, såsom SQL Server, kræver en eksplicit DEFAULT (eller NULL kolonne) begrænsning for sådanne skemaændringer.




  1. hvad er escape-sekvensen for bindestreg (-) i PostgreSQL

  2. Behandling af store mængder data i PHP uden browser-timeout

  3. Hvordan indstilles character_set_database og collation_database til utf8 i my.ini?

  4. Hvordan rettes en kollationskonflikt i en SQL Server-forespørgsel?