CodeGym /Cursos /SQL SELF /Uso de DEFAULT para valores por defecto

Uso de DEFAULT para valores por defecto

SQL SELF
Nivel 17 , Lección 2
Disponible

A veces no queremos rellenar todos los campos a mano — por pereza o porque simplemente no tenemos los datos. En estos casos, puedes poner valores por defecto de antemano para que la base los meta sola cuando haga falta.

Insertar filas en una tabla

Valores por defecto están muy relacionados con insertar filas en una tabla. Así que ahora te cuento esto rapidito, y dentro de un par de niveles volvemos a este tema y le damos la atención que merece.

Añadir filas a una tabla es súper fácil — para eso está el comando especial INSERT INTO. INSERT INTO es una sentencia SQL que mete nuevas filas en una tabla. Es de las más usadas, sobre todo cuando curras con formularios web, logs, registro de usuarios y actualización de datos.

Sintaxis del comando

INSERT INTO tabla (columna1, columna2, ...)
VALUES (valor1, valor2, ...);

Explicación:

  • tabla — nombre de la tabla donde metes los datos.
  • columna1, columna2, ... — lista de columnas (puedes omitirla si metes valores en todas las columnas y en el orden correcto).
  • valor1, valor2, ... — valores que corresponden a las columnas listadas.

Ejemplo sencillo

INSERT INTO users (name, email)
VALUES ('Alice', 'alice@example.com');

Añade a la tabla users una fila: nombre — "Alice", email — "alice@example.com".

Resultado:

id name email
1 Alice alice@example.com

Insertar varias filas de una vez

También puedes meter varios registros en una sola consulta — más rápido y eficiente.

INSERT INTO users (name, email)
VALUES 
  ('Alice', 'alice@example.com'),
  ('Bob', 'bob@example.net'),
  ('Charlie', 'charlie@example.org'),
  ('Diana', 'diana@example.com'),
  ('Eve', 'eve@example.net');

Y así queda el resultado:

id name email
1 Alice alice@example.com
2 Bob bob@example.net
3 Charlie charlie@example.org
4 Diana diana@example.com
5 Eve eve@example.net

Valor por defecto

¿Te acuerdas de la sintaxis para añadir filas?

INSERT INTO tabla (columna1, columna2, ...)
VALUES (valor1, valor2, ...);

¿Sabes por qué ahí va la lista de columnas: columna1, columna2? Podrías poner los valores en el mismo orden que las columnas de la tabla, ¿no?

La cosa es que muchos valores puedes no ponerlos al insertar datos. Por ejemplo, el ID de la nueva fila PostgreSQL lo calcula solo al añadirla. También puede calcular la fecha/hora actual de inserción y meterla en la columna correspondiente. Si no pasas algún dato, PostgreSQL lo pone como NULL.

PostgreSQL puede hacer muchas cosas útiles por ti. Y puedes controlar este proceso — para eso existen los valores por defecto, que se ponen con la palabra clave DEFAULT.

El valor por defecto se usa si al añadir un registro no pones valor para una columna concreta. Esto no solo ahorra tiempo, sino que también evita errores tontos, como saltarte un valor importante.

¿Cómo funciona DEFAULT?

Vamos a ver la sintaxis. Los valores por defecto se ponen al crear la tabla. El formato general es así:

CREATE TABLE tabla (
    columna tipo_de_dato DEFAULT valor_por_defecto
);

O, si quieres añadir un valor por defecto a una tabla que ya existe:

ALTER TABLE tabla
ALTER COLUMN columna
SET DEFAULT valor_por_defecto;

Te cuento más sobre cómo cambiar tablas en un par de lecciones :P

Ejemplo 1: Tabla con campo DEFAULT

Vamos a crear la tabla students, donde cada estudiante recibe automáticamente la fecha de registro:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    registration_date DATE DEFAULT CURRENT_DATE
);

Ahora, cuando añades un estudiante sin poner registration_date, PostgreSQL mete la fecha actual en ese campo.

INSERT INTO students (name) VALUES ('Alex Lin');

Al consultar:

SELECT * FROM students;

Vas a ver este resultado:

id name registration_date
1 Alex Lin 2023-10-15

Ejemplos prácticos

Valor por defecto para una columna numérica

Supón que tienes la tabla grades, donde la columna grade debe tener por defecto 0 si aún no hay nota.

CREATE TABLE grades (
    id SERIAL PRIMARY KEY,
    student_id INTEGER NOT NULL,
    course_id INTEGER NOT NULL,
    grade INTEGER DEFAULT 0
);

Añadimos un registro sin poner grade:

INSERT INTO grades (student_id, course_id) VALUES (1, 101);

Ahora la tabla queda así:

id student_id course_id grade
1 1 101 0

Usar TEXT con valor por defecto

Imagina la tabla teachers, donde a cada profe se le pone automáticamente el estado "no verificado" al añadirlo.

CREATE TABLE teachers (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    status TEXT DEFAULT 'unverified'
);

Añadimos un profe sin poner el estado:

INSERT INTO teachers (name) VALUES ('Peter Pall');

El resultado será:

id name status
1 Peter Pall unverified

Valores por defecto para la hora

Para la tabla meetings, donde se guardan datos de reuniones, puedes poner el campo meeting_time con la hora de inicio estándar: las 10:00 de la mañana.

CREATE TABLE meetings (
    id SERIAL PRIMARY KEY,
    topic VARCHAR(100),
    meeting_time TIME DEFAULT '10:00'
);

Añadimos un registro:

INSERT INTO meetings (topic) VALUES ('Discusión del proyecto');

Resultado:

id topic meeting_time
1 Discusión del proyecto 10:00

Errores típicos al usar DEFAULT

No coincide el tipo de dato con el valor por defecto. Si intentas poner un valor de texto en una columna numérica, PostgreSQL se va a quejar:

CREATE TABLE example (
    number INTEGER DEFAULT 'texto'
);

Error: invalid input syntax for type integer.

Cambiar DEFAULT sin tener en cuenta los registros existentes. Cuando cambias el valor por defecto, eso no afecta a los registros que ya estaban — ellos siguen igual. Si quieres actualizar las filas que ya existen, usa UPDATE.

UPDATE students SET registration_date = '2023-01-01' WHERE registration_date IS NULL;

Confundir DEFAULT con NOT NULL. Un valor por defecto no significa que el campo sea obligatorio (NOT NULL). Si no pones NOT NULL explícitamente, la columna puede tener valor NULL.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION