sql >> Base de Datos >  >> RDS >> Mysql

MySQL agrega una columna NOT NULL

En MySQL, cada tipo de columna tiene un "predeterminado implícito " valor .

Si una columna NOT NULL es agregada a una tabla y no se especifica DEFAULT explícito, se usa el valor predeterminado implícito para completar los datos de la nueva columna. Se aplican reglas similares cuando se especifica el valor DEFAULT.

Como tal, el DDL original produce los mismos resultados 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

La configuración del modo "estricto" afecta las declaraciones DML que se basan en valores predeterminados, pero no afectan el uso predeterminado implícito cuando se agrega la columna.

Aquí está una "prueba" de sqlfiddle ese modo estricto no se aplica a la sentencia ALTER TABLE .. ADD.

Esta es una característica de MySQL. Otros motores, como SQL Server, requieren una restricción DEFAULT (o columna NULL) explícita para dichos cambios de esquema.