Mengubah Struktur dengan ALTER TABLE (Tanpa Membuang Data)
Menambah, mengganti nama, dan menghapus kolom dengan ALTER TABLE, serta perbedaan DROP, TRUNCATE, dan RENAME TABLE.
Struktur tabel bisa berubah kapan saja
Tidak ada yang bisa memprediksi semuanya sejak awal. Setelah tabel dipakai, tiba-tiba bisnis butuh kolom email, atau kolom lama sudah tidak relevan. Daripada membuang tabel dan memulai dari nol (data hilang!), kita pakai ALTER TABLE.
Aksi yang paling sering dipakai
-- Menambah kolom
ALTER TABLE siswa ADD COLUMN email VARCHAR(100);
-- Menambah kolom di posisi tertentu (MySQL)
ALTER TABLE siswa ADD COLUMN email VARCHAR(100) AFTER nama;
-- Mengganti nama kolom (MySQL 8+)
ALTER TABLE siswa RENAME COLUMN kelas TO tingkat;
-- Mengubah tipe / aturan kolom
ALTER TABLE siswa MODIFY COLUMN nama VARCHAR(120) NOT NULL;
-- Mengganti nama sekaligus tipe
ALTER TABLE siswa CHANGE COLUMN umur usia TINYINT;
-- Menghapus kolom (datanya ikut hilang!)
ALTER TABLE siswa DROP COLUMN umur;
-- Mengganti nama tabel
ALTER TABLE siswa RENAME TO murid;
RENAME TABLE murid TO siswa; -- cara lain di MySQL
Catatan simulator: ADD COLUMN, RENAME COLUMN, DROP COLUMN, dan RENAME TO bekerja penuh. Perintah MODIFY diterima tetapi tidak mengubah tipe di simulator (di MySQL asli ia benar-benar mengubah definisi kolom), dan CHANGE hanya mengganti nama. Latihan di bab ini memakai aksi yang didukung penuh.
Beberapa aksi dalam satu perintah
ALTER TABLE siswa
ADD COLUMN email VARCHAR(100),
DROP COLUMN umur;
Dipisah koma, dikerjakan sekaligus. Lebih efisien pada tabel besar.
DROP vs TRUNCATE vs DELETE
| Perintah | Yang dihapus | Bisa dibatalkan? |
|---|---|---|
DELETE FROM t WHERE ... | Baris tertentu | Bisa, bila dalam transaksi |
TRUNCATE TABLE t | Semua baris, struktur tetap, nomor AUTO_INCREMENT kembali ke 1 | Tidak |
DROP TABLE t | Tabel beserta strukturnya | Tidak |
Aturan keselamatan di tabel produksi: sebelum ALTER atau DROP, buat backup dulu. Mengubah tabel berisi jutaan baris bisa mengunci tabel itu selama beberapa menit, jadi lakukan di jam sepi.