ALTER TABLE SQL: Tambah, Ubah, Hapus Kolom Tanpa Downtime
Blog/Tutorial SQL/ALTER TABLE SQL: Tambah, Ubah, Hapus Kolom Tanpa Downtime

ALTER TABLE SQL: Tambah, Ubah, Hapus Kolom Tanpa Downtime

BimaBima
·5 Maret 2026·10 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

ALTER TABLE adalah perintah SQL buat ngubah struktur tabel yang udah ada tanpa ngehapus datanya. Yang paling sering dipakai: ADD COLUMN buat nambah kolom baru, MODIFY atau ALTER COLUMN buat ganti tipe data, dan DROP COLUMN buat hapus kolom. Nambah kolom itu operasi paling aman dan cepat, sementara ganti tipe data di tabel besar bisa ngunci tabel lama — jadi selalu backup dulu dan tes di database salinan.

ALTER TABLE ngubah struktur tabel yang udah ada — tanpa ngilangin datanya.

Kamu udah bikin tabel produk tiga bulan lalu. Sekarang bos minta ada kolom diskon. Kamu nggak perlu bikin ulang tabelnya dan mindahin 40.000 baris. Satu perintah, beres.

Tapi nggak semua operasi ALTER TABLE sama risikonya. Nambah kolom itu aman. Ganti tipe data di tabel 10 juta baris bisa ngunci database kamu setengah jam.

Gimana sintaks dasar ALTER TABLE?

Polanya selalu sama: ALTER TABLE, nama tabelnya, terus perintah yang mau kamu lakuin.

ALTER TABLE nama_tabel
<perintah>;

Ada 5 perintah yang paling sering kepakai:

PerintahBuat apaRisiko
ADD COLUMNNambah kolom baruRendah
MODIFY / ALTER COLUMNGanti tipe dataTinggi
RENAME COLUMNGanti nama kolomSedang
DROP COLUMNHapus kolomPermanen
ADD CONSTRAINTNambah aturanSedang

Gimana cara nambah kolom baru?

Pakai ADD COLUMN, sebutin nama kolom dan tipe datanya. Baris yang udah ada bakal diisi NULL, atau diisi nilai DEFAULT kalau kamu nentuin.

ALTER TABLE produk
ADD COLUMN diskon_persen DECIMAL(5,2) DEFAULT 0;

Semua 40.000 produk yang udah ada langsung punya diskon_persen = 0. Nggak perlu UPDATE manual.

Kalau kamu nggak kasih DEFAULT, kolomnya diisi NULL. Dan NULL itu bukan nol — SUM dan AVG bakal ngabaiin baris itu. Bedanya dijelasin di glosarium NULL.

Nambah beberapa kolom sekaligus:

ALTER TABLE produk
ADD COLUMN supplier VARCHAR(100),
ADD COLUMN tanggal_kadaluarsa DATE;

Satu perintah lebih cepat dari dua perintah terpisah — tabelnya cuma dikunci sekali.

Jangan pasang NOT NULL tanpa DEFAULT di tabel yang udah ada isinya. Database bakal nolak: baris lama nggak punya nilai buat kolom itu, tapi kolomnya nggak boleh kosong. Kontradiksi.

-- Ini gagal kalau tabelnya udah ada isinya
ALTER TABLE produk
ADD COLUMN supplier VARCHAR(100) NOT NULL;

-- Ini jalan
ALTER TABLE produk
ADD COLUMN supplier VARCHAR(100) NOT NULL DEFAULT 'Belum diisi';

Gimana cara ganti tipe data kolom?

Sintaksnya beda-beda tergantung database. Ini bagian yang paling sering bikin orang bingung.

-- MySQL
ALTER TABLE produk
MODIFY COLUMN nama_produk VARCHAR(200) NOT NULL;

-- PostgreSQL
ALTER TABLE produk
ALTER COLUMN nama_produk TYPE VARCHAR(200);

-- SQL Server
ALTER TABLE produk
ALTER COLUMN nama_produk VARCHAR(200) NOT NULL;

Tiga database, tiga sintaks. Tujuannya sama.

Aturan emas: gedein aman, kecilin bahaya.

  • VARCHAR(50) → VARCHAR(200): aman. Data lama muat.
  • VARCHAR(200) → VARCHAR(50): bahaya. Nama produk yang lebih dari 50 karakter bakal dipotong atau bikin query gagal.
  • INT → DECIMAL: aman.
  • DECIMAL → INT: desimalnya ilang. 25.500,75 jadi 25.500.
  • VARCHAR → INT: gagal total kalau ada satu aja baris yang isinya bukan angka.

Cek dulu sebelum ngubah:

-- Ada nama produk yang lebih dari 50 karakter?
SELECT COUNT(*) FROM produk
WHERE LENGTH(nama_produk) > 50;

Kalau hasilnya 0, aman. Kalau nggak nol, benerin datanya dulu.

Gimana cara hapus dan ganti nama kolom?

DROP COLUMN — permanen

ALTER TABLE produk
DROP COLUMN kolom_lama;

Data di kolom itu hilang. Nggak ada Ctrl+Z. Di MySQL, perintah ini juga nggak bisa di-ROLLBACK — begitu jalan, ya udah.

Kebiasaan yang aku pegang: ganti nama dulu, hapus nanti.

-- Minggu ini: tandain sebagai deprecated
ALTER TABLE produk
RENAME COLUMN kolom_lama TO zz_kolom_lama_hapus_juni;

-- Sebulan kemudian, kalau nggak ada yang komplain:
ALTER TABLE produk
DROP COLUMN zz_kolom_lama_hapus_juni;

Kalau ada script atau dashboard yang diam-diam masih pakai kolom itu, mereka bakal error di minggu pertama — waktu datanya masih ada dan kamu masih bisa balikin namanya.

RENAME COLUMN — bikin query lama error

ALTER TABLE produk
RENAME COLUMN stok TO stok_gudang;

Datanya aman. Tapi semua query, view, dan dashboard yang nyebut stok langsung error.

Sebelum rename di database produksi, cari dulu siapa aja yang pakai kolom itu.

Gimana cara nambah constraint ke tabel yang udah jadi?

Foreign key, unique, atau check bisa ditambahin belakangan.

-- Nyambungin transaksi ke produk
ALTER TABLE transaksi
ADD CONSTRAINT fk_produk
FOREIGN KEY (produk_id) REFERENCES produk(produk_id);

-- Nomor HP nggak boleh kembar
ALTER TABLE pelanggan
ADD CONSTRAINT uq_no_hp UNIQUE (no_hp);

-- Harga nggak boleh minus
ALTER TABLE produk
ADD CONSTRAINT chk_harga CHECK (harga > 0);

Catatan penting: database bakal ngecek semua data yang udah ada dulu. Kalau ada 3 baris dengan nomor HP kembar, perintah UNIQUE di atas bakal gagal.

Bersihin datanya dulu:

-- Cari nomor HP yang kembar
SELECT no_hp, COUNT(*) AS jumlah
FROM pelanggan
GROUP BY no_hp
HAVING COUNT(*) > 1;

Kombinasi GROUP BY dan HAVING ini cara paling cepat nyari duplikat. Detailnya di halaman fungsi GROUP BY.

Contoh kasus: toko_berkah ekspansi ke online

Toko_berkah mulai jualan online. Tabel produk yang lama cuma dirancang buat toko fisik — sekarang butuh berat barang buat ongkir, foto produk, dan status tayang.

Tabelnya udah punya 3.200 produk dan 48.000 transaksi. Bikin ulang dari nol itu bukan pilihan.

-- Langkah 1: cek dulu ada berapa nama produk yang kepanjangan
SELECT COUNT(*) FROM produk
WHERE LENGTH(nama_produk) > 100;
-- hasil: 0, aman

-- Langkah 2: tambah kolom baru buat kebutuhan online
ALTER TABLE produk
ADD COLUMN berat_gram INT DEFAULT 0,
ADD COLUMN url_foto VARCHAR(255),
ADD COLUMN tayang_online BOOLEAN DEFAULT FALSE;

-- Langkah 3: nama produk online butuh lebih panjang
ALTER TABLE produk
MODIFY COLUMN nama_produk VARCHAR(200) NOT NULL;

-- Langkah 4: berat wajib diisi buat produk yang tayang
ALTER TABLE produk
ADD CONSTRAINT chk_berat
CHECK (tayang_online = FALSE OR berat_gram > 0);

Empat perintah, nol data hilang, nol downtime. 48.000 transaksi lama tetap utuh dan nyambung.

Perhatiin tayang_online DEFAULT FALSE. Semua 3.200 produk lama otomatis nggak tayang — tim baru bisa nyalain satu-satu setelah fotonya siap. Kalau defaultnya TRUE, toko online-nya langsung nampilin 3.200 produk tanpa foto.

Default value itu keputusan bisnis, bukan cuma teknis.

Kesalahan umum dan cara ngindarinnya

  1. ALTER TABLE langsung di database produksi. Tes dulu di salinan. Selalu.
  2. Nggak backup sebelum DROP COLUMN. Di MySQL, DDL nggak bisa di-rollback. Sekali jalan, hilang.
  3. Ganti tipe data di tabel besar waktu jam sibuk. Database nyalin ulang seluruh tabel dan ngunciin selama proses. Di tabel 10 juta baris itu bisa puluhan menit — dan semua query yang nyentuh tabel itu ngantri. Jadwalin waktu trafik sepi.
  4. Nambah NOT NULL tanpa DEFAULT. Bakal ditolak kalau tabelnya udah ada isinya.
  5. RENAME kolom tanpa ngecek siapa yang pakai. Dashboard dan script yang nyebut nama lama langsung mati.
  6. Ngira sintaks MySQL jalan di PostgreSQL. MODIFY vs ALTER COLUMN — dua database, dua sintaks.

Di PostgreSQL kamu bisa bungkus ALTER TABLE dalam transaction:

BEGIN;
ALTER TABLE produk DROP COLUMN kolom_lama;
-- cek dulu hasilnya
SELECT * FROM produk LIMIT 5;
-- kalau bener:
COMMIT;
-- kalau salah:
ROLLBACK;

MySQL nggak bisa gitu — perintah DDL langsung commit otomatis. Sintaks lengkap tiap database ada di dokumentasi resmi PostgreSQL ALTER TABLE.

FAQ

Apakah ALTER TABLE menghapus data yang sudah ada?

Nggak, kecuali kamu pakai DROP COLUMN. ADD COLUMN, RENAME, dan nambah constraint semuanya nggak nyentuh baris yang udah ada — kolom baru cuma diisi NULL atau nilai DEFAULT. Yang bahaya itu DROP COLUMN, yang ngapus seluruh isi kolom itu permanen, dan MODIFY yang mengecilkan tipe data — data yang nggak muat bakal dipotong atau bikin query gagal.

Apa bedanya MODIFY, ALTER COLUMN, dan CHANGE?

Beda dialek database. MySQL pakai MODIFY buat ganti tipe data dan CHANGE buat ganti nama sekaligus tipe. PostgreSQL dan SQL Server pakai ALTER COLUMN. Tujuannya sama, sintaksnya beda. Kalau kamu nulis script yang harus jalan di dua database berbeda, ini salah satu bagian yang paling sering error — cek dokumentasi database yang kamu pakai.

Kenapa ALTER TABLE bikin database lambat atau nge-hang?

Karena beberapa operasi ALTER TABLE bikin database nyalin ulang seluruh tabel di belakang layar, dan selama proses itu tabelnya kekunci. Di tabel 10 juta baris, ganti tipe data bisa makan puluhan menit dan semua query yang nyentuh tabel itu bakal ngantri. Nambah kolom biasanya cepat di database modern, tapi ganti tipe data dan nambah index hampir selalu berat.

Gimana cara membatalkan ALTER TABLE yang salah?

Tergantung. Di PostgreSQL, ALTER TABLE bisa dibungkus dalam transaction — jalanin BEGIN, ALTER TABLE, cek hasilnya, lalu COMMIT atau ROLLBACK kalau salah. Di MySQL, perintah DDL kayak ALTER TABLE ngelakuin commit otomatis dan nggak bisa di-rollback. Makanya di MySQL kamu wajib backup dulu sebelum ngutak-atik struktur tabel produksi.

Penutup

Yang perlu nempel:

  • ADD COLUMN itu murah dan aman. Kasih DEFAULT biar baris lama nggak jadi NULL.
  • DROP COLUMN permanen. Rename dulu jadi zz_hapus_[bulan], tunggu sebulan, baru hapus.
  • Ganti tipe data di tabel besar bisa ngunci database. Cek dulu datanya muat apa nggak, terus jadwalin waktu sepi.

Coba di database latihan kamu: bikin tabel karyawan, isi 3 baris, terus tambahin kolom bonus dengan default 0. Cek pakai SELECT * — tiga baris lama harusnya langsung punya bonus 0, bukan NULL.

Belum bikin tabelnya? Mulai dari panduan CREATE TABLE dari nol.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel Terkait

7 SQL Client Gratis Terbaik buat Analis Data (2026)
Tutorial SQL
10 Juli 2026•9 menit baca

7 SQL Client Gratis Terbaik buat Analis Data (2026)

Nggak perlu bayar buat nulis query. Ini 7 SQL client gratis yang beneran dipakai analis, plus kelebihan dan kekurangannya masing-masing.

BimaBima
SQL Style Guide: Cara Nulis Query yang Enak Dibaca Tim
Tutorial SQL
7 Juli 2026•9 menit baca

SQL Style Guide: Cara Nulis Query yang Enak Dibaca Tim

Sepuluh aturan SQL style guide yang bikin query kamu kebaca sama tim — dan sama kamu sendiri 6 bulan lagi. Lengkap dengan contoh sebelum-sesudah.

BimaBima
Take-Home Test SQL Data Analyst: Contoh Soal + Cara Ngerjainnya
Tutorial SQL
4 Juli 2026•11 menit baca

Take-Home Test SQL Data Analyst: Contoh Soal + Cara Ngerjainnya

Contoh soal take-home test SQL yang beneran dipakai perusahaan, dikerjain step by step — dari baca soal, nulis query, sampai nyusun insight yang bikin recruiter nengok.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

Copyright © 2026 - All rights reserved

LINKS
SupportPricingDatasetBlogAffiliates
LEGAL
Terms of servicesPrivacy policy
Ngulik Data
DatasetLeaderboardBlogStore