Data tanpa struktur hanyalah tumpukan nilai: angka 3000 tidak bermakna sebelum kita tahu angka itu adalah harga, milik produk bernama apa, dan disimpan pada kolom mana. Tabel memberi struktur itu — kolom bernama dengan tipe data yang jelas — dan statement yang membangunnya adalah CREATE TABLE. Chapter ini membedah sintaksnya secara lengkap, lalu menunjukkan cara memeriksa tabel yang sudah terbentuk.
Sintaks CREATE TABLE #
Kita mulai dari tabel pelanggan untuk database toko kita. Jalankan sqlite3 toko.db, lalu ketik statement berikut:
sqlite> CREATE TABLE pelanggan (
...> id INTEGER,
...> nama TEXT,
...> kota TEXT
...> );
sqlite>Shell menjawab dengan diam — CREATE TABLE tidak mengembalikan baris data, dan tidak ada pesan error berarti statement berhasil. Mari kita bedah baris per baris:
- Baris 1 (
CREATE TABLE pelanggan () — perintah untuk engine SQLite membuat tabel baru bernamapelanggan. Nama tabel mengikuti aturan identifier: huruf, angka, dan garis bawah, dimulai dengan huruf. - Baris 2 (
id INTEGER) — kolom pertama bernamaiddengan tipeINTEGER. Pada chapter selanjutnya kolom ini akan kita jadikan primary key. - Baris 3 (
nama TEXT) — kolomnamauntuk teks nama pelanggan. - Baris 4 (
kota TEXT) — kolomkotauntuk kota tempat tinggal. - Baris 5 (
);) — menutup daftar definisi kolom sekaligus mengakhiri statement dengan titik koma.
Tabel kedua kita, produk, mengikuti pola yang sama dengan empat kolom:
sqlite> CREATE TABLE produk (
...> id INTEGER,
...> nama TEXT,
...> harga INTEGER,
...> stok INTEGER
...> );
sqlite>Bentuk umum statement ini adalah CREATE TABLE nama_tabel (definisi_kolom, definisi_kolom, ...): setiap kolom ditulis sebagai pasangan nama tipe, dipisah koma, dan boleh diikuti constraint seperti NOT NULL — pembahasan lengkapnya ada pada Chapter Constraint pada Tabel.
Saat Tabel Sudah Ada #
SQLite menolak dua tabel dengan nama sama. Coba jalankan statement yang sama sekali lagi:
sqlite> CREATE TABLE pelanggan (id INTEGER, nama TEXT, kota TEXT);
Parse error: table pelanggan already exists
CREATE TABLE pelanggan (id INTEGER, nama TEXT, kota TEXT);
^--- error here
sqlite>Error ini aman — engine membatalkan statement tanpa mengubah tabel yang sudah ada. Jika kita ingin perintah berjalan diam-diam saat tabel sudah ada (misalnya pada skrip yang dijalankan berulang), tambahkan IF NOT EXISTS:
sqlite> CREATE TABLE IF NOT EXISTS pelanggan (
...> id INTEGER,
...> nama TEXT,
...> kota TEXT
...> );
sqlite>Kali ini tidak ada error: karena tabel pelanggan sudah ada, engine melewati statement tersebut tanpa melakukan apa pun.
Memeriksa Struktur yang Sudah Dibuat #
Shell sqlite3 menyediakan dua dot command untuk memeriksa hasil kerja kita — keduanya sudah diperkenalkan pada Chapter Dot Commands, dan di sini kita pakai untuk verifikasi:
sqlite> .tables
pelanggan produk
sqlite> .schema
CREATE TABLE pelanggan (
id INTEGER,
nama TEXT,
kota TEXT
);
CREATE TABLE produk (
id INTEGER,
nama TEXT,
harga INTEGER,
stok INTEGER
);
sqlite>Perintah .tables mendaftar seluruh tabel dalam database, sedangkan .schema mencetak kembali statement CREATE TABLE yang tersimpan. Engine SQLite menyimpan teks statement ini apa adanya di tabel khusus bernama sqlite_master — katalog internal yang mencatat seluruh skema database. sqlite_master bisa kita query seperti tabel biasa:
sqlite> SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name;
pelanggan
produk
sqlite>Struktur sudah berdiri, tetapi kedua tabel itu masih kosong. Sebelum mengisi data, ada satu keunikan SQLite yang wajib dipahami: kolom INTEGER yang kita deklarasikan ternyata tidak menjamin nilai yang tersimpan selalu bilangan bulat. Chapter Tipe Data dan Type Affinity membedah perilaku ini beserta aturan konversinya.