Saltar al contenido principal
eLearner.app
Módulo 9 · Lección 3 de 435/57 en el curso~10 min
Lecciones del módulo (3/4)

Cambiar la estructura: ALTER TABLE

Las necesidades de una aplicación cambian con el tiempo y la base de datos debe mantenerse al día. ALTER TABLE es el comando (extremadamente versátil) dedicado a modificar esquemas de tablas existentes sin tener que eliminarlos (arriesgando los datos que contienen).

Modificar columnas (AÑADIR/DROP/ALTER)

Agregar una columna requiere cuidado. Si la tabla ya contiene datos, agregar una columna "NO NULA" arrojará un error en Postgres: ¿qué debería insertar en las filas anteriores? Debes asociar un DEFAULT.

SQL
-- Aggiungiamo una colonna
ALTER TABLE users ADD COLUMN age INTEGER; -- Ok, sarà NULL ovunque

-- Aggiungiamo NOT NULL, quindi diamogli un deafult
ALTER TABLE users ADD COLUMN active BOOLEAN NOT NULL DEFAULT true;

-- Cancellare una colonna (ATTENZIONE! i dati andranno persi)
ALTER TABLE users DROP COLUMN age;

No solo agregar o eliminar: a menudo es necesario volver a configurar el tipo de una columna o una de sus restricciones:

SQL
-- Cambia il tipo di dato (postgreSQL farà un 'cast' dei dati esistenti se possibile)
ALTER TABLE users ALTER COLUMN username TYPE VARCHAR(100);

-- Aggiunge il vincolo NOT NULL
ALTER TABLE users ALTER COLUMN username SET NOT NULL;

-- Rimuove il vincolo NOT NULL (ritorna ad accettare null)
ALTER TABLE users ALTER COLUMN username DROP NOT NULL;

Agregar restricciones en tiempo de ejecución

Al igual que con CREATE TABLE, podemos usar ALTER TABLE para adjuntar un CONSTRAINT a una tabla que ya está en uso en la aplicación de producción.

SQL
-- Aggiungi un nuovo Foreign Key
ALTER TABLE orders
  ADD CONSTRAINT fk_order_status FOREIGN KEY (status_id) REFERENCES statuses(id);

-- Aggiungi un CHECK
ALTER TABLE products
  ADD CONSTRAINT price_positive CHECK (price > 0);

-- E per distruggerli?
ALTER TABLE products DROP CONSTRAINT price_positive;

Cambiar nombre

Se puede cambiar el nombre de columnas y tablas:

SQL
ALTER TABLE users RENAME TO auth_users;
ALTER TABLE auth_users RENAME COLUMN username TO login_name;

Pruébalo

Ejercicio#sql.m9.l3.e1
Intentos: 0Cargando...

La tabla 'productos' actualmente tiene una columna 'nombre'. Modifique la tabla cambiando el nombre de la columna 'nombre' a 'título'. Utilice la operación RENOMBRAR COLUMNA.

Cargando editor...
Mostrar pista

Sintaxis: ALTERAR TABLA... RENOMBRAR COLUMNA... A...

Solución disponible después de 3 intentos

Agregar restricciones en la posproducción

Ejercicio#sql.m9.l3.e2
Intentos: 0Cargando...

Modifique la tabla 'productos' agregando una restricción CHECK (llamada 'verifica_prezzo') que requiere que el precio (columna 'precio') sea mayor que 0. La restricción debe agregarse sin eliminar la columna original.

Cargando editor...
Mostrar pista

Sintaxis: ALTER TABLE tabla ADD CONSTRAINT nombre CHECK (...)

Solución disponible después de 3 intentos