SQL Academy · Lección

Valores DEFAULT y columnas generadas

Proporcione valores DEFAULT (NOW(), uuid_generate_v4(), 'pending') y calcule valores sobre la marcha con columnas GENERATED ALWAYS AS.

Lección 4 de 413 pasos

Valores DEFAULT y columnas generadas es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.

DEFAULT: rellenado automático de valores faltantes

Cuando INSERT omite una columna, se usa DEFAULT:

CREATE TABLE users (
  id BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL,
  status TEXT NOT NULL DEFAULT 'active',
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

DEFAULT habituales

Patrones que usará en todas partes:

created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
id UUID PRIMARY KEY DEFAULT gen_random_uuid()
is_active BOOLEAN NOT NULL DEFAULT true
status TEXT NOT NULL DEFAULT 'pending'

Añadir un DEFAULT más adelante

Las filas existentes no se rellenan retroactivamente de forma predeterminada; solo las nuevas inserciones usan el valor predeterminado:

ALTER TABLE users ALTER COLUMN status SET DEFAULT 'active';

-- For existing rows, backfill manually:
UPDATE users SET status = 'active' WHERE status IS NULL;

Añadir NOT NULL con DEFAULT

PostgreSQL 11+ permite añadir rápidamente columnas NOT NULL con un DEFAULT constante; no reescribe la tabla:

ALTER TABLE users
  ADD COLUMN signup_source TEXT NOT NULL DEFAULT 'web';
-- Fast in PG 11+, slow before

Columnas generadas calculadas (STORED)

Una columna cuyo valor se calcula automáticamente a partir de otras columnas:

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  qty INT NOT NULL,
  unit_price NUMERIC(10,2) NOT NULL,
  total NUMERIC(12,2) GENERATED ALWAYS AS (qty * unit_price) STORED
);

INSERT INTO orders (qty, unit_price) VALUES (3, 9.99);
SELECT * FROM orders;       -- total is auto-filled

tsvector generado para búsqueda de texto completo

Un uso excelente de las columnas generadas STORED:

ALTER TABLE articles
  ADD COLUMN search_doc tsvector
    GENERATED ALWAYS AS (to_tsvector('english', title || ' ' || body)) STORED;
CREATE INDEX articles_search_idx ON articles USING GIN(search_doc);

Columnas generadas virtuales

Actualmente PostgreSQL solo admite STORED (las columnas virtuales llegarán en futuras versiones). Otras bases de datos (MySQL) admiten columnas VIRTUAL, que se calculan en el momento del SELECT.

No puede usar INSERT en columnas generadas

Intentar escribir en una de ellas es un error: se calculan, no se almacenan explícitamente:

INSERT INTO orders (qty, unit_price, total) VALUES (3, 9.99, 30);
-- ERROR: column "total" can only be updated to DEFAULT

Valores predeterminados basados en secuencias

SERIAL/BIGSERIAL es una forma abreviada de decir «valor predeterminado procedente de una secuencia»:

-- Roughly equivalent:
CREATE TABLE t (id BIGSERIAL PRIMARY KEY);

-- =>
CREATE SEQUENCE t_id_seq;
CREATE TABLE t (id BIGINT PRIMARY KEY DEFAULT nextval('t_id_seq'));
ALTER SEQUENCE t_id_seq OWNED BY t.id;

Columnas IDENTITY

La forma estándar de SQL de definir una identidad:

CREATE TABLE t (
  id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  name TEXT
);

-- GENERATED BY DEFAULT AS IDENTITY allows explicit overrides.

DEFAULT y lógica de negocio

Mantenga los valores predeterminados simples. La lógica compleja debe estar en el código de la aplicación o en un trigger BEFORE INSERT.

Resumen

DEFAULT completa los valores que faltan; GENERATED calcula valores a partir de otras columnas.

  • NOW(), gen_random_uuid(), literales constantes
  • Las columnas STORED calculadas son ideales para datos derivados
  • Las columnas de identidad son el patrón moderno para las PK

Comprobación rápida

¿Qué cláusula hace que una columna se complete automáticamente con la hora actual al realizar un INSERT si no se proporciona ningún valor?

Gratis para empezar

Aprende SQL con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
46
Lecciones
183

Preguntas frecuentes

¿La lección «Valores DEFAULT y columnas generadas» es gratis?

Sí — el texto completo de «Valores DEFAULT y columnas generadas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Valores DEFAULT y columnas generadas»?

Proporcione valores DEFAULT (NOW(), uuid_generate_v4(), 'pending') y calcule valores sobre la marcha con columnas GENERATED ALWAYS AS. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Academy?

No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Valores DEFAULT y columnas generadas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Academy?

Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Restricciones NOT NULL y CHECK
  2. Restricciones UNIQUE y claves compuestas
  3. FOREIGN KEY y acciones referenciales
  4. Valores DEFAULT y columnas generadas
← Volver a SQL Academy