Di dalam shell sqlite3 kita sesungguhnya bekerja dengan dua bahasa sekaligus: statement SQL yang dikirim ke engine database, dan dot command yang diproses oleh program CLI itu sendiri. Pemula sering mencampur keduanya — misalnya menambahkan titik koma pada .tables — lalu dibalas pesan error yang membingungkan. Chapter ini membedah dot commands yang paling sering dipakai, mulai dari menjelajah struktur database sampai mengatur tampilan output.

Dot Command Bukan SQL #

Dot command adalah perintah yang dimulai dengan titik pada awal baris, seperti .tables atau .mode csv. Shell sqlite3 membaca baris tersebut untuk dirinya sendiri dan tidak pernah meneruskannya ke engine SQLite. Konsekuensinya terasa pada aturan penulisan:

AspekDot commandStatement SQL
Contoh.tablesSELECT * FROM produk;
Diproses olehShell sqlite3Engine SQLite
Titik koma di akhirTidak boleh adaWajib
Kapan dieksekusiSegera setelah Enter ditekanSetelah ; ditekan
Jangkauan efekSesi shell saat iniDatabase di disk

Tiga Perintah Informasi #

.help #

.help mencetak daftar seluruh dot command yang tersedia. Berikut lima baris pertamanya:

text
.archive ...             Manage SQL archives
.auth ON|OFF             Show authorizer callbacks
.backup ?DB? FILE        Backup DB (default "main") to FILE
.bail on|off             Stop after hitting an error.  Default OFF
.cd DIRECTORY            Change the working directory to DIRECTORY

Daftar lengkapnya panjang, dan setiap entri memuat nama perintah beserta ringkasan fungsinya. Perintah .help juga menerima pola pencarian: .help mode hanya menampilkan bantuan untuk perintah .mode.

.tables #

.tables mendaftar seluruh tabel pada database aktif:

text
sqlite> .tables
produk

Output di atas diambil dari database toko.db yang kita bangun pada chapter sebelumnya. Perintah ini menjawab pertanyaan paling dasar saat membuka database asing: “tabel apa saja yang ada di sini?”.

.schema #

.schema mencetak statement CREATE yang membentuk struktur database saat ini:

text
sqlite> .schema
CREATE TABLE produk (
  id INTEGER PRIMARY KEY,
  nama TEXT NOT NULL,
  harga INTEGER NOT NULL
);

Dengan begitu kita bisa membaca ulang definisi tabel tanpa membuka berkas SQL aslinya. Kedua perintah ini — .tables dan .schema — adalah pasangan pemeriksa rutin sebelum menulis query terhadap database yang belum dikenal.

Mengatur Tampilan Output #

.headers #

Secara bawaan, hasil query dicetak tanpa judul kolom. Perintah .headers on menyalakan judul kolom untuk sisa sesi:

text
sqlite> .headers on
sqlite> SELECT * FROM produk;
id|nama|harga
1|Kopi Gayo|45000
2|Teh Melati|18000
3|Gula Aren|25000

Perintah .headers off mematikannya kembali; keduanya berlaku untuk sisa sesi atau hingga diganti.

.mode #

.mode mengubah format pencetakan hasil query. Contoh-contoh pada bagian ini dimulai dari pengaturan bawaan shell — mode list dengan .headers off — lalu berpindah mode satu per satu. Karena demo .headers on di atas masih aktif, kita kembalikan dulu ke kondisi bawaan:

text
sqlite> .headers off
sqlite> SELECT * FROM produk;
1|Kopi Gayo|45000
2|Teh Melati|18000
3|Gula Aren|25000
text
sqlite> .mode csv
sqlite> SELECT * FROM produk;
1,"Kopi Gayo",45000
2,"Teh Melati",18000
3,"Gula Aren",25000

Satu kekhasan mode csv: setiap baris output diakhiri pasangan karakter CRLF (\r\n), bukan hanya \n — mengikuti kebiasaan berkas CSV lintas platform. Detail ini tidak terlihat di terminal, tetapi akan terasa ketika output dialihkan ke berkas lalu dibandingkan baris demi baris.

text
sqlite> .headers on
sqlite> .mode column
sqlite> SELECT * FROM produk;
id  nama        harga
--  ----------  -----
1   Kopi Gayo   45000
2   Teh Melati  18000
3   Gula Aren   25000
text
sqlite> .mode json
sqlite> SELECT * FROM produk;
[{"id":1,"nama":"Kopi Gayo","harga":45000},
{"id":2,"nama":"Teh Melati","harga":18000},
{"id":3,"nama":"Gula Aren","harga":25000}]

Panduan memilih mode dirangkum pada tabel berikut:

ModeBentuk outputCocok untuk
listnilai dipisah ``
csvkoma dengan tanda kutippertukaran data ke spreadsheet
columnkolom rata dengan .widthpembacaan manusia
jsonarray JSONdikonsumsi program lain

Mode lain juga tersedia — box, markdown, table, line, hingga insert — dan seluruhnya bisa dilihat lewat .help mode.

.width #

Pada mode column, lebar kolom dihitung otomatis dari isi terpanjang. Perintah .width memaksa lebar minimum per kolom. Contoh berikut mengatur kolom pertama 3 karakter, kolom kedua 15, dan kolom ketiga 8 — mode column beserta header diaktifkan kembali dulu karena demo .mode json masih melekat di sesi:

text
sqlite> .headers on
sqlite> .mode column
sqlite> .width 3 15 8
sqlite> SELECT * FROM produk;
id   nama             harga   
---  ---------------  --------
1    Kopi Gayo        45000   
2    Teh Melati       18000   
3    Gula Aren        25000   

Angka negatif membuat kolom rata kanan; tanpa .width, mode column memakai lebar isi terpanjang.

Pengaturan Hanya Berlaku Selama Sesi #

Semua dot command pengaturan — .headers, .mode, .width — berlaku untuk sesi shell saat itu saja. Begitu keluar lewat .quit, semuanya kembali ke nilai bawaan. Perintah .show menampilkan nilai pengaturan yang sedang aktif, termasuk mode, headers, dan berkas database yang terbuka, sehingga kita selalu bisa memeriksa kondisi sesi sebelum query penting dijalankan.

Dengan dot commands, shell sqlite3 berubah dari sekadar pintu SQL menjadi ruang kerja yang nyaman. Bagaimana jika bekal ini ingin kita pakai tanpa terminal sama sekali? Chapter Alat GUI untuk SQLite menutup section ini dengan memetakan pilihan alat grafisnya.