Belajar dengan membaca secara berurutan

Membuat dan Mengubah Tabel

Pelajari definisi tabel SQL dari dasar. Mencakup CREATE TABLE, PRIMARY KEY, memeriksa definisi tabel, serta menambah, menghapus, dan mengganti nama kolom dengan ALTER TABLE — semuanya berjalan langsung di browser kamu.

Tentang SQL yang dipelajari di kursus ini

Kursus ini mengajarkan sintaks SQL universal yang berjalan di RDBMS utama — MySQL, Oracle, PostgreSQL, SQL Server, dan lainnya. Dasar-dasar seperti CREATE TABLE / SELECT / WHERE / JOIN / GROUP BY ditulis dengan cara yang sama, tidak peduli database mana yang kamu pakai.

Karena alasan teknis, konsol di browser ini menjalankan SQLite, tapi setiap kali ada fitur yang berbeda antar database (penegakan panjang pada tipe, cara menampilkan daftar tabel, dll.), kamu akan menemukan catatan berdampingan seperti Di MySQL kamu akan menulis... supaya kamu tahu apa yang dipakai di tempat lain.

Apa itu tabel?

Pada database relasional, kamu menyimpan data di dalam tabel (kisi-kisi baris dan kolom). Setiap tabel terdiri dari kolom dan baris (record), dan setiap kolom punya tipe data tetap yang mengontrol nilai apa yang boleh disimpan.

Mendesain tabel berarti memutuskan di awal kolom mana yang akan disertakan dan tipe apa yang akan diberikan ke masing-masing kolom. Mengunci tipe sejak awal mencegah nilai yang tidak diharapkan masuk diam-diam di kemudian hari.

Struktur tabel user
Definisi kolom (tipe)1 baris = 1 recordidINTEGERnameTEXTageINTEGERcityTEXT1Alice30Tokyo2Bob25Osaka3Carol35Tokyo
Kamu menentukan nama kolom dan tipenya di awal, lalu menumpuk baris (record) di atasnya. Setiap sel menyimpan nilai yang sesuai dengan tipe kolomnya.

CREATE TABLE — membuat tabel

Untuk membuat tabel, kamu memakai pernyataan CREATE TABLE. Tulis nama tabel, lalu di dalam tanda kurung daftar pasangan nama kolom + tipe yang dipisah koma. Jangan menaruh koma setelah kolom terakhir.

Mengunci tipe sejak awal membuat data yang tidak diharapkan lebih sulit menyusup masuk (misalnya string yang berakhir di kolom angka).

-- Membuat tabel dengan mendaftar nama kolom dan tipenya
CREATE TABLE book_record (
  id INTEGER,
  title TEXT,
  price INTEGER,
  published_on TEXT
);

Tipe data umum

Tipe data SQL bervariasi nama dan detailnya antar sistem database, tapi untuk memulai kamu hanya perlu tahu tipe-tipe berikut.

TipeNilai yang disimpanContoh penggunaan
INTEGERBilangan bulatid / age / count
REALBilangan pecahan (floating-point)score / weight
TEXTStringname / address / message
BLOBData binerAliran byte untuk gambar, audio, dll.
NUMERICAngka secara umum (termasuk tanggal, boolean)Berfungsi ganda sebagai date / boolean

Bagaimana dengan VARCHAR / CHAR / DATETIME di MySQL?

Di MySQL dan PostgreSQL kamu sering melihat tipe yang lebih rinci seperti VARCHAR(255) / CHAR(13) / BOOLEAN / DATETIME. Konsol di sini menerima tipe-tipe ini secara sintaks, tapi penegakan panjang (seperti VARCHAR(10) yang menolak karakter ke-11) hanya berlaku di RDBMS dengan tipe ketat seperti MySQL atau PostgreSQL.

Untuk latihan di kursus ini, kolom kebanyakan memakai INTEGER / TEXT / REAL supaya tetap sederhana. Saat memindahkan definisi ke MySQL, kamu bisa mengganti INTEGER dengan INT dan TEXT dengan VARCHAR(N) atau TEXT — struktur CREATE TABLE-nya sendiri tetap sama.

Coba membuat tabel book_record untuk menyimpan buku. (Jalankan dengan benar dan penjelasannya akan muncul.)

① Pada baris pertama, tulis DROP TABLE IF EXISTS book_record; untuk menghapus book_record yang sudah ada.

② Selanjutnya, tulis CREATE TABLE book_record (...) dengan tiga kolom: id INTEGER, title TEXT, dan price INTEGER.

③ Untuk verifikasi, akhiri dengan SELECT name FROM sqlite_master WHERE type='table'; dan pastikan book_record muncul di daftar.

SQL Editor

Jalankan query untuk melihat hasil

PRIMARY KEY — mengidentifikasi baris secara unik

Primary key (PRIMARY KEY — kolom yang dipakai untuk mengidentifikasi baris secara unik) adalah kolom yang nilainya harus unik dan tidak pernah NULL. Kamu menjadikan kolom sebagai primary key kalau nilainya harus selalu ada dan tidak pernah bertabrakan, seperti nomor pegawai atau ID pengguna.

Dengan adanya primary key, kamu bisa mengambil satu baris secara andal. Sebagai aturan, setiap tabel sebaiknya punya tepat satu primary key.

Tiga sifat PRIMARY KEY
SifatArtiPelanggaran / EfekKeunikanTidak ada nilai duplikat✗ pelanggaran UNIQUEWajibNULL tidak diizinkan✗ pelanggaran NOT NULLAuto-numberedHanya INTEGER PRIMARY KEYMengisi integer kosongkalau INSERT melewatinya
Primary key adalah kolom dengan tiga sifat: unik, tidak mengizinkan NULL, dan (dengan INTEGER PRIMARY KEY) nilainya dinomori otomatis. Setiap tabel sebaiknya punya tepat satu.
-- Tambahkan PRIMARY KEY setelah definisi kolom
CREATE TABLE member (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  joined_on TEXT
);

INTEGER PRIMARY KEY menomori otomatis

Kolom yang dideklarasikan sebagai INTEGER PRIMARY KEY akan dinomori otomatis mulai dari 1 setiap kali kamu INSERT tanpa menentukan nilainya. Di MySQL penomoran otomatis yang sama ditulis sebagai id INT PRIMARY KEY AUTO_INCREMENT, dan di PostgreSQL sebagai id SERIAL PRIMARY KEY. Di konsol kursus ini, INTEGER PRIMARY KEY sudah cukup.

Kalau kamu INSERT dengan nilai eksplisit, nilai itu yang dipakai, dan auto-number berikutnya melanjutkan dari integer tepat setelahnya.

Coba membuat tabel member untuk menyimpan anggota, dengan id sebagai primary key.

① Tulis DROP TABLE IF EXISTS member; untuk menghapus member yang sudah ada.

② Tulis CREATE TABLE member (...) dengan tiga kolom: id INTEGER PRIMARY KEY, name TEXT NOT NULL, dan joined_on TEXT.

③ Tulis INSERT INTO member (name, joined_on) VALUES ('Frank', '2026-04-01'), ('Grace', '2026-04-02'); untuk menyisipkan dua baris tanpa menentukan id.

④ Akhiri dengan SELECT * FROM member; untuk memastikan id dinomori otomatis.

SQL Editor

Jalankan query untuk melihat hasil

Mencoba pelanggaran constraint — cara kerja NOT NULL

Mari sengaja melanggar aturan untuk melihat cara kerja constraint (aturan yang harus dipatuhi nilai sebuah kolom) seperti NOT NULL dan PRIMARY KEY. NOT NULL adalah aturan yang tidak mengizinkan NULL di kolom. Menambahkannya ke kolom wajib (nama, alamat email, dll.) mencegah baris yang tidak lengkap menyusup masuk.

Tabel user yang dibuat di awal artikel didefinisikan dengan name TEXT NOT NULL. Kalau kamu mencoba menyisipkan NULL ke kolom name, database akan menolak INSERT dan mengembalikan error.

Cara kerja constraint NOT NULL
name yang diinsertPemeriksaan NOT NULLHasil'Alice'OK(ada nilai)○ Insert berhasil'' (string kosong)OK(string kosong ≠ NULL)○ Insert berhasilNULLPelanggaran(NULL tidak diizinkan)✗ NOT NULLconstraint failed
INSERT yang menaruh NULL ke kolom NOT NULL ditolak dengan error. String kosong ('') diperlakukan sebagai nilai berbeda dari NULL, jadi INSERT dengan string kosong tetap lolos — ingat perbedaan ini.

Kolom name di tabel user didefinisikan dengan constraint NOT NULL. Sengaja masukkan NULL untuk melihat error pelanggaran constraint.

① Jalankan INSERT INTO user (...) VALUES (10, NULL, 30, 'Tokyo'); yang sudah disiapkan (karena kamu mencoba menaruh NULL ke name, kamu seharusnya mendapat error seperti NOT NULL constraint failed: user.name).

(Latihan ini benar kalau error muncul — itulah persisnya peran constraint: menahan data yang tidak valid sebelum sempat masuk.)

-- INSERT yang memicu pelanggaran NOT NULL di Latihan 3
INSERT INTO user (id, name, age, city)
  VALUES (10, NULL, 30, 'Tokyo');

SQL Editor

Jalankan query untuk melihat hasil

Memeriksa dan menghapus tabel

Setelah membuat tabel, kamu pasti ingin memeriksa tabel apa saja yang ada dan kolom apa saja yang dimiliki masing-masing. Konsol di sini memakai dua query ini:

- Daftar tabel: SELECT name FROM sqlite_master WHERE type='table';

- Definisi kolom: PRAGMA table_info(nama_tabel);

Di MySQL kamu menulis SHOW TABLES; dan DESCRIBE nama_tabel;; Oracle memakai SELECT table_name FROM user_tables;. Setiap database punya sintaks khususnya sendiri. DROP TABLE untuk menghapus tabel berfungsi sama di semua database.

-- ① Daftar semua tabel
SELECT name FROM sqlite_master WHERE type='table';

-- ② Tampilkan definisi kolom dari tabel user
PRAGMA table_info(user);

-- ③ Hapus tabel
DROP TABLE IF EXISTS book_record;

Intip isi tabel user yang disiapkan di awal artikel, lalu berlatih menghapus tabel yang sudah tidak kamu butuhkan.

① Tulis PRAGMA table_info(user); untuk menampilkan definisi kolom dari tabel user.

② Lihat kolom pk di hasilnya untuk melihat kolom mana yang menjadi primary key.

③ Hapus tabel book_record yang kamu buat di Latihan 1 dengan DROP TABLE IF EXISTS book_record;.

④ Terakhir, jalankan SELECT name FROM sqlite_master WHERE type='table'; dan pastikan book_record sudah hilang dari daftar.

SQL Editor

Jalankan query untuk melihat hasil

ALTER TABLE — mengubah definisi yang sudah ada

Begitu sistem kamu masuk ke produksi, permintaan seperti "tambahkan satu kolom lagi" atau "ganti nama tabel" pasti akan datang. Di situlah ALTER TABLE berperan. Empat operasi yang dibahas di sini semuanya bekerja di MySQL dan PostgreSQL dengan sintaks yang hampir identik.

OperasiSintaksPenggunaan
Ganti nama tabelALTER TABLE nama_lama RENAME TO nama_baru;Mengganti nama seluruh tabel
Tambah kolomALTER TABLE tabel ADD COLUMN kol tipe;Tambah atribut baru
Hapus kolomALTER TABLE tabel DROP COLUMN kol;Hapus atribut yang tidak terpakai
Ganti nama kolomALTER TABLE tabel RENAME COLUMN lama TO baru;Ganti nama kolom
Empat operasi ALTER TABLE
RENAME TOGanti nama tabelADD COLUMNTambah kolomDROP COLUMNHapus kolomRENAME COLUMNGanti nama kolom
Mengetahui cara mengganti nama tabel, menambah kolom, menghapus kolom, dan mengganti nama kolom mencakup hampir semua perubahan definisi yang akan kamu lakukan dalam praktik.

MODIFY / CHANGE COLUMN / AFTER di MySQL

Di MySQL kamu bisa mengubah tipe kolom dengan ALTER TABLE tabel MODIFY kol tipe;, mengubah nama dan tipe kolom sekaligus dengan CHANGE COLUMN lama baru tipe;, dan menghapus primary key dengan DROP PRIMARY KEY;.

-- Ganti nama tabel
ALTER TABLE user RENAME TO user_record;

-- Tambah kolom (kolom email ditambahkan di akhir)
ALTER TABLE user_record ADD COLUMN email TEXT;

-- Ganti nama kolom
ALTER TABLE user_record RENAME COLUMN city TO area;

-- Hapus kolom
ALTER TABLE user_record DROP COLUMN email;

Terapkan ketiga operasi ALTER TABLE (tambah, ganti nama, hapus) ke tabel user secara berurutan. (Ini latihan terakhir di artikel.)

① Tambah kolom email dengan ALTER TABLE user ADD COLUMN email TEXT;.

② Ganti nama kolom city menjadi area dengan ALTER TABLE user RENAME COLUMN city TO area;.

③ Hapus kolom email yang sudah kamu tambahkan dengan ALTER TABLE user DROP COLUMN email;.

④ Akhiri dengan PRAGMA table_info(user); dan pastikan area muncul setelah penggantian nama dan email sudah tidak ada.

SQL Editor

Jalankan query untuk melihat hasil
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Mana dari berikut ini yang menggambarkan primary key (PRIMARY KEY) dengan benar?

Soal 2Apa cara paling tepat untuk memeriksa definisi kolom dari tabel user di konsol kursus ini?

Soal 3Mana yang menggambarkan perilaku ALTER TABLE dengan benar di konsol kursus ini?