Lompati ke konten utama
Modul 9 · Pelajaran 3 dari 435/57 dalam kursus~10 min
Pelajaran modul (3/4)

Mengubah struktur: ALTER TABLE

Kebutuhan aplikasi berubah seiring waktu, dan database harus mengikutinya. ALTER TABLE adalah perintah (sangat serbaguna) yang didedikasikan untuk memodifikasi skema tabel yang ada tanpa harus menghapusnya (mempertaruhkan data di dalamnya).

Memodifikasi Kolom (ADD/DROP/ALTER)

Menambahkan kolom memerlukan kehati-hatian. Jika tabel sudah berisi data, menambahkan kolom "NOT NULL" akan menimbulkan kesalahan di Postgres: apa yang harus disisipkan di baris lama? Anda harus mengaitkan 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;

Tidak hanya menambah atau menghapus: Anda sering kali perlu mengkonfigurasi ulang type kolom atau salah satu batasannya:

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;

Menambahkan Batasan saat runtime

Sama seperti CREATE TABLE, kita dapat menggunakan ALTER TABLE untuk melampirkan CONSTRAINT ke tabel yang sudah digunakan di aplikasi produksi.

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;

Mengganti nama

Kolom dan tabel dapat diganti namanya:

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

Cobalah

Latihan#sql.m9.l3.e1
Upaya: 0Memuat…

Tabel 'produk' saat ini memiliki kolom 'nama'. Ubah tabel dengan mengganti nama kolom 'nama' menjadi 'judul'. Gunakan operasi RENAME COLUMN.

Memuat editor…
Tunjukkan petunjuk

Sintaks: ALTER TABLE ... GANTI NAMA KOLOM ... KE ...

Solusi tersedia setelah 3 upaya

Menambahkan Batasan pada pasca produksi

Latihan#sql.m9.l3.e2
Upaya: 0Memuat…

Ubah tabel 'produk' dengan menambahkan batasan CHECK (bernama 'verifica_prezzo') yang mengharuskan harga (kolom 'harga') lebih besar dari 0. Batasan harus ditambahkan tanpa menghilangkan kolom aslinya.

Memuat editor…
Tunjukkan petunjuk

Sintaks : ALTER TABLE tabel TAMBAHKAN nama CONSTRAINT CHECK (...)

Solusi tersedia setelah 3 upaya