Sebelum menyimpan data, kamu bikin wadahnya dulu: tabel. Perintah CREATE TABLE menentukan nama tabel, kolom-kolomnya, tipe isi tiap kolom, dan aturan tambahannya. Bayangin bikin formulir pendaftaran kosong: kamu menentukan isian apa saja yang ada, tiap isian diisi angka atau teks, mana yang wajib diisi, dan nomor pendaftarannya diisi petugas, bukan pendaftar. Formulir kosong itu tabel, dan tiap formulir yang terisi nanti jadi satu baris.
🧪 Tebakan cepat: kamu bikin kolom
id INTEGERsaja, tanpa aturan tambahan, lalu menyimpan siswa tanpa menyebut id-nya. id siswa itu jadi berapa? Tebak dulu, jawabannya ada di bagian "PRIMARY KEY dan AUTOINCREMENT".
Bentuk CREATE TABLE
Tabel students ini dipakai terus sampai akhir kelas SQL:
CREATE TABLE students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
grade INTEGER,
city TEXT
);
CREATE TABLE students (membuat tabel bernamastudents. Daftar kolomnya ada di dalam kurung.id INTEGER PRIMARY KEY AUTOINCREMENTadalah kolomidberisi bilangan bulat, jadi primary key, dan diisi database sendiri.name TEXT NOT NULLadalah kolomnameberisi teks, wajib diisi.grade INTEGERdancity TEXTadalah kolom biasa, boleh kosong.- Tiap kolom ditulis: nama, lalu tipe, lalu aturan (kalau ada), semuanya di baris yang sama. Kolom dipisah koma, dan kolom terakhir gak diberi koma.
);menutup daftar kolom dan perintahnya.
Aturan seperti PRIMARY KEY dan NOT NULL disebut constraint. Database menegakkannya tiap kali ada data masuk.
Tipe data
| Tipe | Isinya | Contoh |
|---|---|---|
INTEGER |
bilangan bulat | 90, -5 |
TEXT |
teks | 'Dewi', 'Jakarta' |
REAL |
bilangan desimal (pakai titik) | 87.5 |
Itu tipe utama SQLite. MySQL punya VARCHAR(n) untuk teks dengan panjang maksimal n karakter, misalnya name VARCHAR(100). SQLite menerima tulisan VARCHAR(100) juga, tapi memperlakukannya seperti TEXT dan gak mengecek panjangnya.
SQLite juga longgar: teks 'delapan puluh' tetap diterima di kolom INTEGER. MySQL (dengan pengaturan bawaannya) dan PostgreSQL menolaknya. Jadi pilih tipe yang tepat sejak awal.
PRIMARY KEY dan AUTOINCREMENT
Uji tabelnya dengan menyimpan Dewi dan Rizky tanpa menyebut id. Hasilnya tergantung cara kolom id ditulis:
Kolom id ditulis |
id Dewi | id Rizky |
|---|---|---|
id INTEGER |
NULL | NULL |
id INTEGER PRIMARY KEY |
1 | 2 |
id INTEGER PRIMARY KEY AUTOINCREMENT |
1 | 2 |
NULL artinya kosong, gak ada nilainya. Kolom INTEGER biasa gak diisi siapa-siapa, jadi id-nya NULL. Itu jawaban tebakannya.
PRIMARY KEYmenjadikan kolom itu kunci utama: nilainya unik di tiap baris. Di SQLite, kolom yang ditulis persisINTEGER PRIMARY KEYjuga diisi otomatis: id terbesar yang ada + 1.AUTOINCREMENTmenambah satu janji: nomor yang pernah dipakai gak dipakai lagi. Tanpa dia, kalau baris dengan id terbesar (misalnya 3) dihapus, baris berikutnya dapat 3 lagi. Dengan dia, dapat 4.
Ejaannya beda di tiap database:
-- SQLite
id INTEGER PRIMARY KEY AUTOINCREMENT
-- MySQL
id INT PRIMARY KEY AUTO_INCREMENT
-- PostgreSQL
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY
Editor SQL di BelajarWeb.dev menerjemahkan ejaan MySQL yang umum (INT, VARCHAR(n), AUTO_INCREMENT) ke ejaan SQLite sebelum menjalankannya, jadi di latihan dua-duanya diterima.
NOT NULL: kolom wajib diisi
NOT NULL menolak baris yang kolom itu kosong. Dengan name TEXT NOT NULL, menyimpan siswa tanpa nama dijawab:
Error: NOT NULL constraint failed: students.name
Barisnya gak masuk. NULL beda dengan teks kosong '' dan angka 0: dua-duanya tetap nilai, jadi lolos NOT NULL.
⚠️ Jebakan yang sering ketemu
- Koma setelah kolom terakhir.
city TEXT,lalu);dijawabnear ")": syntax error. - Lupa koma di antara kolom.
id INTEGER PRIMARY KEY AUTOINCREMENT name TEXTdijawabnear "name": syntax error. - Constraint ditaruh di akhir daftar.
name TEXT, NOT NULLdijawabnear "NOT": syntax error. Constraint ditulis setelah tipe, di baris kolomnya sendiri. - Mengira
INT PRIMARY KEYsama denganINTEGER PRIMARY KEYdi SQLite asli. Di SQLite, cuma ejaan persisINTEGER PRIMARY KEYyang mengisi id otomatis. Editor di sini menerjemahkanINTjadiINTEGER, tapi SQLite di laptopmu gak.
TL;DR: CREATE TABLE nama (kolom TIPE ATURAN, ...); membuat tabel. Tiap kolom: nama, tipe (INTEGER, TEXT, REAL, atau VARCHAR(n) di MySQL), lalu constraint di baris yang sama; koma di antara kolom, gak di belakang yang terakhir. PRIMARY KEY membuat nilai unik, dan di SQLite INTEGER PRIMARY KEY mengisi id sendiri; AUTOINCREMENT (MySQL: AUTO_INCREMENT) menjamin nomor gak dipakai ulang. NOT NULL menolak baris yang kolomnya kosong: NOT NULL constraint failed.