DEFAULTes el valor que se insertará en ausencia de un valor explícito en una declaración de inserción / actualización. Supongamos que su DDL no tenía la NOT NULLrestricción:
ALTER TABLE tbl ADD COLUMN col VARCHAR(20) DEFAULT "MyDefault"
Entonces podrías emitir estas declaraciones
INSERT INTO tbl (A, B) VALUES (NULL, NULL);
INSERT INTO tbl (A, B, col) VALUES (NULL, NULL, DEFAULT);
INSERT INTO tbl (A, B, col) DEFAULT VALUES;
INSERT INTO tbl (A, B, col) VALUES (NULL, NULL, NULL);
Alternativamente, también puede usar DEFAULTen UPDATEdeclaraciones, de acuerdo con el estándar SQL-1992 :
UPDATE tbl SET col = DEFAULT;
UPDATE tbl SET col = NULL;
Tenga en cuenta que no todas las bases de datos admiten todas estas sintaxis estándar de SQL. Agregar la NOT NULLrestricción provocará un error con las declaraciones 4, 6, mientras que 1-3, 5aún sean declaraciones válidas. Entonces, para responder a su pregunta: No, no son redundantes.
Incluso con un valor predeterminado, siempre puede anular los datos de la columna con
null.La
NOT NULLrestricción no le permitirá actualizar esa fila después de que se creó connullvalorfuente
Mi profesor de SQL dijo que si especificas tanto un
DEFAULTvalor comoNOT NULLoNULL,DEFAULTsiempre debe expresarse antesNOT NULLoNULL.Me gusta esto:
ALTER TABLE tbl ADD COLUMN col VARCHAR(20) DEFAULT "MyDefault" NOT NULLALTER TABLE tbl ADD COLUMN col VARCHAR(20) DEFAULT "MyDefault" NULLfuente
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 fila.
Sin un conjunto nulo, no puede insertar un valor nulo en el campo, ya que arrojará un error.
Piense en ello como un mecanismo a prueba de fallos para evitar nulos.
fuente