Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL ajoute une colonne NOT NULL

Dans MySQL, chaque type de colonne a un "défaut implicite " valeur .

Si une colonne NOT NULL est ajoutée à une table , et qu'aucun DEFAULT explicite n'est spécifié, la valeur par défaut implicite est utilisée pour remplir les nouvelles données de colonne. Des règles similaires s'appliquent lorsque la valeur DEFAULT est spécifiée.

Ainsi, le DDL d'origine produit les mêmes résultats que :

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

Les paramètres du mode "strict" affectent les instructions DML reposant sur des valeurs par défaut, mais n'affectent pas l'utilisation par défaut implicite lorsque la colonne est ajoutée.

Voici une "preuve" sqlfiddle ce mode strict ne s'applique pas à l'instruction ALTER TABLE .. ADD.

Il s'agit d'une fonctionnalité MySQL. D'autres moteurs, comme SQL Server, nécessitent une contrainte explicite DEFAULT (ou colonne NULL) pour de telles modifications de schéma.