Contenido de esta guía
Qué hace DEFAULT
DEFAULT declara un valor predeterminado para una columna. El motor lo utiliza cuando un INSERT omite esa columna o, en los motores que lo admiten en ese contexto, cuando se escribe expresamente la palabra DEFAULT.
No es una corrección automática de datos. Si proporcionas un valor, ese valor tiene prioridad. Si proporcionas NULL, el resultado suele ser NULL cuando la columna lo permite; el valor predeterminado no sustituye por sí solo ese NULL.
Cómo se declara y se utiliza
CREATE TABLE pedidos_demo (
id INTEGER PRIMARY KEY,
estado VARCHAR(20) NOT NULL DEFAULT 'pendiente'
);El valor pertenece a la definición de estado. La restricción NOT NULL expresa otra regla: la columna no puede quedar sin valor.
Ejemplo guiado
INSERT INTO pedidos_demo (id) VALUES (101);
INSERT INTO pedidos_demo (id, estado) VALUES (102, 'pagado');
SELECT id, estado
FROM pedidos_demo
ORDER BY id;| id | estado |
|---|---|
| 101 | pendiente |
| 102 | pagado |
La primera inserción omite estado, por lo que se usa 'pendiente'. La segunda proporciona 'pagado' y no activa el valor predeterminado.
DEFAULT actúa al escribir la fila. Cambiar el valor predeterminado después no modifica las filas existentes; solo afecta a futuras operaciones que lo utilicen.
Error frecuente
Esperar que DEFAULT reemplace un NULL explícito
INSERT INTO pedidos_demo (id, estado)
VALUES (103, NULL);Como estado es NOT NULL, esta inserción falla. Para obtener el valor predeterminado, omite la columna o utiliza la sintaxis DEFAULT que admita tu motor.
Comprueba lo aprendido
Crea una preferencia inicial
Define una tabla suscripciones con id como clave primaria, email obligatorio y activa con valor predeterminado 1. Después inserta la fila (1, 'ana@example.test') sin escribir activa.
DEFAULT 1 después del tipo de activa.NOT NULL a las columnas que siempre deben tener valor.INSERT, enumera solo id y email.Solución razonada
CREATE TABLE suscripciones (
id INTEGER PRIMARY KEY,
email VARCHAR(200) NOT NULL,
activa INTEGER NOT NULL DEFAULT 1
);
INSERT INTO suscripciones (id, email)
VALUES (1, 'ana@example.test');La fila recibe activa = 1 porque la columna no aparece en la inserción.
Compatibilidad entre motores
La idea básica de un valor predeterminado es portable. Sí cambian las expresiones permitidas, la sintaxis para alterar un valor existente y el uso de DEFAULT dentro de otras sentencias. Las funciones de fecha y los mecanismos de identidad también son específicos de cada motor.
Qué debes recordar
DEFAULTse aplica cuando falta un valor en la inserción.- Un valor explícito tiene prioridad, incluso cuando es
NULLy la columna lo permite. - Cambiar el valor predeterminado no reescribe las filas anteriores.
- Combínalo con restricciones cuando el dominio necesite reglas adicionales.