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

MySQL aggiunge una colonna NOT NULL

In MySQL, ogni tipo di colonna ha un "predefinito implicito " valore .

Se una colonna NOT NULL viene aggiunta a una tabella e non viene specificato alcun DEFAULT esplicito, il valore predefinito implicito viene utilizzato per popolare i nuovi dati della colonna. Regole simili si applicano quando viene specificato il valore DEFAULT.

In quanto tale, il DDL originale produce gli stessi risultati di:

-- 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

Le impostazioni della modalità "rigorosa" influiscono sulle istruzioni DML basate sui valori predefiniti, ma non influiscono sull'utilizzo predefinito implicito quando viene aggiunta la colonna.

Ecco una "prova" di sqlfiddle tale modalità rigorosa non si applica all'istruzione ALTER TABLE .. ADD.

Questa è una funzionalità di MySQL. Altri motori, come SQL Server, richiedono un vincolo DEFAULT (o colonna NULL) esplicito per tali modifiche allo schema.