Menambahkan kolom ke tabel yang sudah ada di SQL adalah tugas umum yang perlu Anda lakukan seiring berkembangnya skema database Anda. Statement ALTER TABLE memungkinkan Anda mengubah struktur tabel yang sudah ada tanpa kehilangan data. Panduan ini membahas cara menggunakan ALTER TABLE untuk menambahkan kolom, lengkap dengan contoh praktis.
Memahami ALTER TABLE
Perintah ALTER TABLE digunakan untuk menambah, menghapus, atau mengubah kolom pada tabel yang sudah ada. Perintah ini juga bisa dipakai untuk mengubah constraint tabel. Tutorial ini berfokus khusus pada penambahan kolom baru.
Saat menambahkan kolom baru, Anda harus menentukan nama kolom, tipe data, serta constraint tambahan atau nilai default jika ada. Operasi ini bersifat atomik dan tidak akan memengaruhi data yang sudah ada.
Sintaks Dasar untuk Menambahkan Kolom
Berikut sintaks dasar untuk menambahkan kolom baru ke tabel:
ALTER TABLE table_name
ADD column_name column_type [constraint];
- table_name: Nama tabel tempat Anda menambahkan kolom.
- column_name: Nama kolom baru.
-
column_type: Tipe data kolom baru (misalnya
VARCHAR,INT,DATE, dll.). -
constraint: Opsional. Constraint tambahan seperti
NOT NULL,UNIQUE, atau nilaiDEFAULT.
Contoh: Menambahkan Kolom
Mari mulai dengan tabel employees sederhana:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
position VARCHAR(50)
);
-- Current data in employees table:
INSERT INTO employees (id, name, position) VALUES (1, 'Alice', 'Engineer');
INSERT INTO employees (id, name, position) VALUES (2, 'Bob', 'Manager');
SELECT * FROM employees;
Output:
+----+-------+----------+
| id | name | position |
+----+-------+----------+
| 1 | Alice | Engineer |
| 2 | Bob | Manager |
+----+-------+----------+
Menambahkan Kolom Baru untuk Gaji
Mari tambahkan kolom baru bernama salary dengan tipe data DECIMAL(10, 2), yang dapat menyimpan angka hingga 10 digit, termasuk 2 angka desimal:
ALTER TABLE employees
ADD salary DECIMAL(10, 2);
Perintah ini mengubah tabel employees agar menyertakan kolom baru salary. Baris yang sudah ada akan bernilai NULL pada kolom ini sampai Anda memperbaruinya.
Memverifikasi Struktur Tabel
Pastikan kolom sudah ditambahkan dengan DESCRIBE atau SHOW COLUMNS (tergantung sistem database Anda):
DESCRIBE employees;
Output:
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(100)| YES | | NULL | |
| position | varchar(50) | YES | | NULL | |
| salary | decimal(10,2)| YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
Menambahkan Kolom dengan Nilai Default
Anda juga bisa menambahkan kolom dengan nilai default. Berikut cara menambahkan kolom hire_date yang nilai default-nya tanggal saat ini:
ALTER TABLE employees
ADD hire_date DATE DEFAULT CURRENT_DATE;
Baris baru yang dimasukkan ke tabel employees akan otomatis memiliki hire_date berisi tanggal saat ini jika tidak ada nilai yang diberikan.
Menambahkan Kolom dengan Constraint NOT NULL
Menambahkan kolom dengan constraint NOT NULL ke tabel yang sudah ada perlu perhatian khusus. Anda tidak bisa begitu saja menambahkan kolom NOT NULL ke tabel yang sudah berisi data tanpa memberikan nilai default, karena hal ini akan melanggar constraint untuk baris yang sudah ada.
Masalah NOT NULL pada Data yang Sudah Ada
Perintah ini akan gagal jika tabel sudah berisi baris:
-- This will fail on tables with existing data
ALTER TABLE employees
ADD phone_number VARCHAR(20) NOT NULL;
Error terjadi karena baris yang sudah ada akan bernilai NULL pada kolom baru, sehingga melanggar constraint NOT NULL.
Solusi 1: Tambahkan Kolom dengan Nilai Default
Solusi paling sederhana adalah memberikan nilai default:
ALTER TABLE employees
ADD phone_number VARCHAR(20) NOT NULL DEFAULT 'Unknown';
Cara ini berhasil karena:
- Kolom ditambahkan dengan nilai default untuk semua baris yang sudah ada
- Constraint
NOT NULLlangsung terpenuhi - Insert berikutnya harus memberikan nilai atau memakai nilai default
Solusi 2: Proses Bertahap
Untuk kontrol lebih atas nilainya, gunakan pendekatan bertahap:
-- Step 1: Add the column as nullable
ALTER TABLE employees
ADD phone_number VARCHAR(20);
-- Step 2: Update existing rows with appropriate values
UPDATE employees
SET phone_number = 'Unknown'
WHERE phone_number IS NULL;
-- Step 3: Add the NOT NULL constraint
ALTER TABLE employees
ALTER COLUMN phone_number SET NOT NULL;
Catatan: Sintaks untuk langkah 3 berbeda-beda tergantung sistem database:
-
PostgreSQL:
ALTER COLUMN phone_number SET NOT NULL -
MySQL:
MODIFY COLUMN phone_number VARCHAR(20) NOT NULL -
SQL Server:
ALTER COLUMN phone_number VARCHAR(20) NOT NULL
Solusi 3: Nilai Default Kondisional
Anda bisa menetapkan nilai default yang berbeda berdasarkan data yang sudah ada:
-- Add column with temporary default
ALTER TABLE employees
ADD department VARCHAR(50) NOT NULL DEFAULT 'TBD';
-- Update with conditional logic based on position
UPDATE employees
SET department = CASE
WHEN position = 'Engineer' THEN 'Engineering'
WHEN position = 'Manager' THEN 'Management'
ELSE 'General'
END;
-- Optionally remove the default if you don't want it for future inserts
ALTER TABLE employees
ALTER COLUMN department DROP DEFAULT;
Best Practice untuk Kolom NOT NULL
-
Rencanakan sejak awal: Pertimbangkan constraint
NOT NULLsaat merancang tabel pertama kali - Gunakan default yang bermakna: Pilih nilai default yang sesuai dengan logika bisnis Anda
-
Uji terlebih dahulu: Selalu uji operasi
ALTER TABLEpada salinan data Anda - Dokumentasikan perubahan: Catat setiap modifikasi skema agar tim tetap sinkron
- Pertimbangkan migrasi data: Rencanakan cara mengisi kolom baru dengan data yang bermakna
Memverifikasi Constraint NOT NULL
Setelah menambahkan kolom NOT NULL, pastikan constraint-nya sudah diterapkan:
-- Check table structure
DESCRIBE employees;
-- Verify constraint by attempting to insert NULL (should fail)
INSERT INTO employees (id, name, position, phone_number)
VALUES (3, 'Carol', 'Analyst', NULL);
-- Error: Column 'phone_number' cannot be null
Operasi Terkait
Setelah tahu cara menambahkan kolom, Anda mungkin juga ingin mempelajari operasi ALTER TABLE lainnya:
- Cara mengganti nama kolom dengan ALTER TABLE
- PostgreSQL: Mengubah tipe kolom
- Cara menambahkan kolom di Teradata
Operasi-operasi ini penting untuk memelihara dan mengembangkan skema database Anda seiring berubahnya kebutuhan aplikasi.
Kesimpulan
Menggunakan ALTER TABLE untuk menambahkan kolom memungkinkan modifikasi skema tanpa kehilangan data. Fleksibilitas ini membantu database Anda beradaptasi dengan kebutuhan aplikasi yang terus berkembang. Selalu backup data Anda sebelum mengubah skema, dan pastikan kompatibilitasnya dengan logika aplikasi yang sudah ada.
Untuk operasi database yang lebih canggih dan mengelola database SQL Anda secara efektif, coba gunakan Beekeeper Studio, yang menyediakan antarmuka intuitif untuk manajemen skema database dan operasi SQL.
Beekeeper Studio Adalah GUI Database Gratis & Open Source
Tool query & editor SQL terbaik yang pernah saya pakai. Semua yang saya butuhkan untuk mengelola database ada di sini. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio cepat, intuitif, dan mudah digunakan. Beekeeper mendukung banyak sekali database, dan berjalan mulus di Windows, Mac, dan Linux.
Apa Kata Pengguna tentang Beekeeper Studio
"Beekeeper Studio sepenuhnya menggantikan workflow SQL lama saya. Cepat, intuitif, dan membuat kerja dengan database kembali menyenangkan."
"Saya sudah mencoba banyak GUI database, tapi Beekeeper punya keseimbangan sempurna antara fitur dan kesederhanaan. Langsung jalan."