Sesi Pertama

Membuka basis data dari terminal dan membaca strukturnya dengan perintah titik .tables dan .schema.

Daftar isi

Topik ini memulai praktik command line SQLite dari langkah paling dasar, yaitu menjalankan program sqlite3 di terminal terhadap basis data perpustakaan. Setelah perbedaan perintah titik dan pernyataan SQL dipahami, struktur tabel dapat dibaca dengan .tables dan .schema tanpa membuka satu baris datanya pun. Seluruh contoh pada topik ini dieksekusi sungguhan, sehingga setiap keluaran dapat direproduksi ulang dengan mengetik perintah yang sama.

Membuka basis data dari terminal#

Program sqlite3 menerima nama berkas sebagai argumennya. Perintah sqlite3 perpustakaan.db membuka basis data pada berkas tersebut, atau menciptakan berkas baru bila belum ada, kemudian menunggu perintah berikutnya. Basis data contoh sepanjang modul ini menampung koleksi sebuah perpustakaan dan mulanya berisi tabel buku serta tabel anggota. Cara tercepat menyiapkannya adalah mengirim pernyataan SQL ke sqlite3 melalui heredoc, yaitu penulisan beberapa baris teks langsung di dalam skrip shell tanpa berkas perantara.

bash
# membuat basis data perpustakaan.db beserta dua tabel dan isinya
sqlite3 perpustakaan.db <<'SQL'
CREATE TABLE buku (
  id      INTEGER PRIMARY KEY,
  judul   TEXT NOT NULL,
  penulis TEXT NOT NULL,
  tahun   INTEGER
);
CREATE TABLE anggota (
  id     INTEGER PRIMARY KEY,
  nama   TEXT NOT NULL,
  gabung DATE
);
INSERT INTO buku (judul, penulis, tahun) VALUES
  ('Kisah Kota Tua', 'Sari Wulandari', 2018),
  ('Anak Sungai', 'Rahmat Hidayat', 2021),
  ('Musim di Ujung Jalan', 'Lina Marlina', 2019);
INSERT INTO anggota (nama, gabung) VALUES
  ('Ali', '2026-01-12'),
  ('Budi', '2026-02-03');
SQL

Perintah di atas selesai tanpa menampilkan pesan apa pun. Banyak perintah command line berperilaku serupa, yaitu tidak menampilkan apa pun ketika berhasil dan hanya menampilkan teks ketika terjadi error. Berkas perpustakaan.db kini berada di direktori kerja dan siap dibuka kembali kapan saja.

Perilaku menciptakan berkas baru berlaku untuk nama berkas apa pun yang belum ada. Contoh berikut membuka awal.db yang belum pernah dibuat, lalu menghitung isinya melalui tabel sistem sqlite_schema, yaitu katalog internal yang mencatat seluruh objek basis data.

bash
# membuka nama berkas yang belum ada menciptakan basis data kosong
sqlite3 awal.db "SELECT count(*) FROM sqlite_schema;"
# berkasnya sungguh tercipta
ls awal.db
# contoh dibersihkan
rm awal.db
text Keluaran
0
awal.db

Angka 0 menunjukkan basis data yang baru tercipta memang kosong, sedangkan baris awal.db berasal dari perintah ls yang memastikan berkasnya benar ada. Baris terakhir menghapus contoh tersebut agar direktori kerja tidak menumpuk berkas percobaan.

Perintah titik dan pernyataan SQL#

Sesi sqlite3 menerima dua jenis perintah yang berbeda sifatnya. Jenis pertama adalah pernyataan SQL seperti SELECT dan CREATE TABLE, yang diproses oleh mesin basis data dan diakhiri tanda titik koma. Jenis kedua adalah perintah titik (dot command), yaitu perintah internal milik program sqlite3 yang diawali karakter titik dan tidak memerlukan titik koma, contohnya .tables dan .schema. Perintah titik mengatur perilaku program, sedangkan pernyataan SQL mengatur data di dalam basis data.

Ketika dijalankan tanpa masukan yang dipipakan, sqlite3 menampilkan prompt, yaitu tanda sqlite> yang berarti program siap menerima perintah berikutnya. Prompt itu muncul setelah perintah sqlite3 perpustakaan.db diketik di terminal, dan sesi ditutup dengan perintah titik .quit atau tombol Ctrl+D. Karena transkrip interaktif sulit direproduksi secara otomatis, seluruh contoh pada modul ini mengirim perintah ke sqlite3 dalam bentuk noninteraktif, baik melalui heredoc untuk pernyataan SQL maupun melalui printf yang dipipakan (pipe, diarahkan menjadi masukan proses lain) untuk perintah titik. Kedua pola tersebut menghasilkan keluaran yang sama persis dengan mengetik perintah pada prompt.

Perbedaan kedua jenis perintah terlihat pada contoh berikut. Pernyataan SELECT meminta judul dan tahun terbit seluruh buku terbitan mulai 2019, dan mesin SQL mengembalikan dua baris dalam bentuk bawaan, yaitu nilai yang dipisahkan karakter garis tegak.

bash
# pernyataan SQL dieksekusi setelah tanda titik koma
sqlite3 perpustakaan.db <<'SQL'
SELECT judul, tahun
FROM buku
WHERE tahun >= 2019
ORDER BY judul;
SQL
text Keluaran
Anak Sungai|2021
Musim di Ujung Jalan|2019

Bentuk dipisah garis tegak ini padat dan mudah diolah oleh perintah shell lain, tetapi kurang nyaman dibaca langsung. sqlite3 menyediakan perintah titik .mode untuk mengatur bentuk tampilannya tanpa menyentuh data. Selama sesi berjalan, hasil query yang sama boleh ditampilkan ulang dalam bentuk lain kapan saja.

Membaca struktur dengan .tables dan .schema#

Langkah pertama yang berguna ketika menghadapi basis data yang belum dikenal adalah melihat tabel apa saja yang dimilikinya. Perintah titik .tables mendaftar seluruh tabel milik pengguna pada basis data yang sedang terbuka.

bash
# .tables mendaftar seluruh tabel pada basis data yang terbuka
printf '.tables\n' | sqlite3 perpustakaan.db
text Keluaran
anggota     buku

Dua nama tabel tampil tersusun menurut abjad. Katalog sqlite_schema tidak ikut tercantum karena .tables hanya menampilkan tabel buatan pengguna. Apabila tabelnya banyak, daftar dapat disaring dengan pola, misalnya .tables bu% untuk seluruh tabel yang namanya diawali bu.

Nama tabel saja belum cukup untuk mengetahui kolomnya. Perintah titik .schema yang diikuti nama tabel menampilkan pernyataan CREATE TABLE asli yang dipakai ketika tabel itu diciptakan, persis sebagaimana teksnya tersimpan di sqlite_schema.

bash
# .schema buku menampilkan CREATE TABLE penyusun tabel buku
printf '.schema buku\n' | sqlite3 perpustakaan.db
text Keluaran
CREATE TABLE buku (
  id      INTEGER PRIMARY KEY,
  judul   TEXT NOT NULL,
  penulis TEXT NOT NULL,
  tahun   INTEGER
);

Keluaran tersebut menerangkan banyak hal sekaligus. Tabel buku memiliki empat kolom bernama id, judul, penulis, dan tahun, dengan id bertipe INTEGER PRIMARY KEY sehingga nilainya unik dan diisi otomatis. Kata NOT NULL pada judul dan penulis berarti kedua kolom itu wajib diisi. Informasi semacam ini lazim dicari justru sebelum query pertama ditulis.

Tanpa argumen, .schema menampilkan skema seluruh tabel sekaligus menurut urutan penemuannya.

bash
# .schema tanpa argumen menampilkan skema seluruh tabel
printf '.schema\n' | sqlite3 perpustakaan.db
text Keluaran
CREATE TABLE buku (
  id      INTEGER PRIMARY KEY,
  judul   TEXT NOT NULL,
  penulis TEXT NOT NULL,
  tahun   INTEGER
);
CREATE TABLE anggota (
  id     INTEGER PRIMARY KEY,
  nama   TEXT NOT NULL,
  gabung DATE
);

Dengan sepasang perintah ini, struktur basis data yang belum pernah dilihat dapat dipetakan dalam hitungan detik tanpa membaca satu baris datanya. Kebiasaan memeriksa .tables lalu .schema menjadi orientasi baku sebelum pernyataan SELECT pertama ditulis pada basis data yang baru diterima.

Kesalahan umum#

Salah ketik pada nama perintah titik langsung ditolak dengan pesan error. Program tidak menebak maksud pengetiknya, sehingga perintah yang tidak dikenal memunculkan pesan berikut beserta saran membuka .help.

bash
# perintah titik yang salah nama ditolak
printf '.tablez\n' | sqlite3 perpustakaan.db
text Keluaran
Error: unknown command or invalid arguments:  "tablez". Enter ".help" for help

Kelalaian kedua terjadi pada pernyataan SQL yang belum diberi titik koma di sesi interaktif. sqlite3 menganggap teksnya belum selesai, mengganti prompt menjadi tanda kelanjutan, dan menunggu baris berikutnya, sehingga pernyataan terkesan tidak berjalan. Perbaikannya sederhana, yaitu mengetik tanda titik koma saja pada baris berikutnya, dan pernyataan yang tertunda langsung dieksekusi. Pada masukan noninteraktif, pernyataan tanpa titik koma tetap dijalankan ketika masukan habis, tetapi kebiasaan mengakhiri setiap pernyataan dengan titik koma patut dijaga agar perilakunya konsisten di mana saja.

Kelalaian ketiga terjadi pada nama berkas yang salah ketik. Karena sqlite3 langsung menciptakan berkas untuk nama yang belum ada, perintah seperti sqlite3 perpustkaan.db tidak memunculkan error, tetapi menciptakan basis data kosong yang baru tanpa peringatan apa pun. Keluaran .tables yang kosong menjadi petunjuk pertamanya, dan berkas yang keliru itu cukup dihapus karena memang tidak pernah berisi apa pun. Kecermatan pada penulisan nama berkas sejak awal menghindarkan kebingungan semacam ini.

Ringkasan#

  • Perintah sqlite3 diikuti nama berkas membuka basis data tersebut atau menciptakannya bila berkas belum ada.
  • Perintah titik mengatur perilaku program sqlite3 dan ditulis tanpa titik koma, sedangkan pernyataan SQL diakhiri titik koma dan diproses mesin basis data.
  • .tables mendaftar tabel yang ada, dan .schema menampilkan pernyataan CREATE TABLE penyusunnya beserta tipe setiap kolom.
  • Sesi interaktif ditandai prompt sqlite> dan ditutup dengan .quit.

Referensi#