tipos restricciones restriccion ejemplos datos constraint check sql default-value ddl notnull

datos - restricciones check sql server ejemplos



DefiniciĆ³n de Columna SQL: valor predeterminado y no redundante nulo? (4)

Incluso con un valor predeterminado, siempre puede anular los datos de la columna con null .

La restricción NOT NULL no le permitirá actualizar esa fila después de haber sido creada con valor null

He visto muchas veces la siguiente sintaxis que define una columna en una declaración DDL crear / alterar:

ALTER TABLE tbl ADD COLUMN col VARCHAR(20) NOT NULL DEFAULT "MyDefault"

La pregunta es: dado que se especifica un valor predeterminado, ¿es necesario especificar también que la columna no debe aceptar valores NULL? En otras palabras, ¿DEFAULT no hace que NOT NULL sea redundante?


Mi profesor de SQL dijo que si especificas un valor DEFAULT y NOT NULL o NULL , DEFAULT siempre se debe expresar antes de NOT NULL o NULL .

Me gusta esto:

ALTER TABLE tbl ADD COLUMN col VARCHAR(20) DEFAULT "MyDefault" NOT NULL

ALTER TABLE tbl ADD COLUMN col VARCHAR(20) DEFAULT "MyDefault" NULL


Yo diría que no.

Si la columna acepta valores nulos, entonces no hay nada que le impida insertar un valor nulo en el campo, hasta donde yo sé, el valor predeterminado solo se aplica en la creación de una nueva regla.

Con un conjunto no nulo, no puede insertar un valor nulo en el campo, ya que generará un error.

Piense en ello como un mecanismo a prueba de fallas para evitar nulos.


DEFAULT es el valor que se insertará en ausencia de un valor explícito en una instrucción de inserción / actualización. Supongamos, su DDL no tiene la restricción NOT NULL :

ALTER TABLE tbl ADD COLUMN col VARCHAR(20) DEFAULT "MyDefault"

Entonces podrías emitir estas declaraciones

-- 1. This will insert "MyDefault" into tbl.col INSERT INTO tbl (A, B) VALUES (NULL, NULL); -- 2. This will insert "MyDefault" into tbl.col INSERT INTO tbl (A, B, col) VALUES (NULL, NULL, DEFAULT); -- 3. This will insert "MyDefault" into tbl.col INSERT INTO tbl (A, B, col) DEFAULT VALUES; -- 4. This will insert NULL into tbl.col INSERT INTO tbl (A, B, col) VALUES (NULL, NULL, NULL);

Alternativamente, también puede usar DEFAULT en las sentencias UPDATE , de acuerdo con el estándar SQL-1992 :

-- 5. This will update "MyDefault" into tbl.col UPDATE tbl SET col = DEFAULT; -- 6. This will update NULL into tbl.col UPDATE tbl SET col = NULL;

Tenga en cuenta que no todas las bases de datos admiten todas estas sintaxis estándar SQL. Agregar la restricción NOT NULL causará un error con las declaraciones 4, 6 , mientras que 1-3, 5 son aún declaraciones válidas. Entonces para responder a tu pregunta:

No, NOT NULL y DEFAULT no son redundantes. En particular, NOT NULL puede tener un tremendo impacto en el rendimiento de las consultas, como se explica en este blog aquí.