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.
-- 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:
-- 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.
-- 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:
ALTER TABLE users RENAME TO auth_users;
ALTER TABLE auth_users RENAME COLUMN username TO login_name;Cobalah
Tabel 'produk' saat ini memiliki kolom 'nama'. Ubah tabel dengan mengganti nama kolom 'nama' menjadi 'judul'. Gunakan operasi RENAME COLUMN.
Tunjukkan petunjuk
Sintaks: ALTER TABLE ... GANTI NAMA KOLOM ... KE ...
Solusi tersedia setelah 3 upaya
Menambahkan Batasan pada pasca produksi
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.
Tunjukkan petunjuk
Sintaks : ALTER TABLE tabel TAMBAHKAN nama CONSTRAINT CHECK (...)
Solusi tersedia setelah 3 upaya