Перейти до основного вмісту
Модуль 9 · Урок 3 із 435/57 у курсі~10 min
Модульні уроки (3/4)

Зміна структури: ALTER TABLE

Потреби програми змінюються з часом, і база даних повинна встигати. ALTER TABLE — це (надзвичайно універсальна) команда, призначена для модифікації існуючих схем таблиць без необхідності їх видаляти (ризикуючи даними всередині).

Змінення стовпців (ADD / DROP / ALTER)

Додавання стовпця вимагає обережності. Якщо таблиця вже містить дані, додавання стовпця "NOT NULL" викличе помилку в Postgres: що слід вставити в старі рядки? Ви повинні пов’язати 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;

Не просто додавання або видалення: вам часто потрібно повторно налаштувати type стовпця або одне з його обмежень:

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;

Додавання обмежень під час виконання

Як і з CREATE TABLE, ми можемо використовувати ALTER TABLE, щоб прикріпити CONSTRAINT до таблиці, яка вже використовується у робочій програмі.

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;

Перейменування

І стовпці, і таблиці можна перейменувати:

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

Спробуйте

вправи#sql.m9.l3.e1
Спроби: 0Завантаження…

У таблиці «продукти» наразі є стовпець «назва». Змініть таблицю, перейменувавши стовпець «name» на «title». Використовуйте операцію RENAME COLUMN.

Завантаження редактора…
Показати підказку

Синтаксис: ALTER TABLE ... RENAME COLUMN ... TO ...

Рішення доступне після 3 спроб

Додавання обмежень у постпродакшн

вправи#sql.m9.l3.e2
Спроби: 0Завантаження…

Змініть таблицю «products», додавши обмеження CHECK (під назвою «verifica_prezzo»), яке вимагає, щоб ціна (стовпець «price») була більшою за 0. Обмеження має бути додано без видалення початкового стовпця.

Завантаження редактора…
Показати підказку

Синтаксис: ALTER TABLE таблиця ADD CONSTRAINT ім'я CHECK (...)

Рішення доступне після 3 спроб