TLDR #
SQLite adalah database engine paling banyak dipakai di dunia. Beda dari MariaDB atau PostgreSQL, SQLite tidak punya server — seluruh database tersimpan dalam satu file biasa. Kamu cukup import sqlite3 (Python) atau install better-sqlite3 (Node.js) dan database langsung jalan. Artikel ini memandu dari nol sampai bisa dipakai di aplikasi.
Pendahuluan #
Pernah butuh database tapi merasa install MySQL terlalu ribet? SQLite jawabannya. Ia embedded — menyatu langsung dengan aplikasi, tanpa proses server terpisah, tanpa port, tanpa user/password.
Kelebihan utama SQLite:
- Tanpa server — tidak perlu instalasi dan konfigurasi layanan.
- Satu file — seluruh database (tabel, index, data) dalam satu file
.db. - Ringan — library utuh cuma beberapa ratus KB.
- Nol konfigurasi — langsung pakai begitu file dibuat.
- Handal — mendukung transaksi ACID penuh.
Karena itu SQLite jadi pilihan utama untuk aplikasi mobile (Android/iOS), aplikasi desktop, embedded system, browser (via WebAssembly), hingga aplikasi web skala kecil.
SQLite vs MariaDB: kapan pakai yang mana? #
| Kriteria | SQLite | MariaDB/PostgreSQL |
|---|---|---|
| Arsitektur | Embedded (tanpa server) | Client–server |
| Konfigurasi | Nol | Perlu setup layanan |
| Akses konkuren (tulis) | Satu penulis pada satu waktu | Banyak penulis bersamaan |
| Skala | Kecil–menengah | Menengah–besar |
| Penyimpanan | Satu file | Banyak file/direktori |
| Cocok untuk | Mobile, desktop, prototype, web kecil | Web produksi dengan banyak user |
Aturan praktis: kalau aplikasi dipakai banyak user menulis data secara bersamaan lewat jaringan, pakai MariaDB. Kalau aplikasi lokal atau trafik rendah, SQLite sudah lebih dari cukup.
Prasyarat #
Siapkan:
- Terminal (Linux/macOS/Windows).
- Python 3 (sudah menyertakan modul
sqlite3bawaan) — opsional untuk latihan via kode. - SQLite CLI (
sqlite3) — untuk latihan interaktif.
Instalasi SQLite CLI #
Linux (Debian/Ubuntu) #
sudo apt update
sudo apt install -y sqlite3macOS #
brew install sqliteVerifikasi #
sqlite3 --versionMembuat dan Membuka Database #
Buka CLI dan buat database baru:
sqlite3 dataku.dbBaris ini langsung membuat file dataku.db (jika belum ada) dan masuk ke prompt sqlite>.
Perintah bantuan:
.help -- daftar perintah titik (dot command)
.databases -- lihat database aktif
.exit -- keluarPerlu diingat: perintah titik (.tables, .schema, dll.) adalah perintah CLI SQLite, bukan SQL. Sedangkan perintah SQL ditulis biasa dan diakhiri titik koma (;).
Membuat Tabel #
Buat tabel siswa:
CREATE TABLE siswa (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nama TEXT NOT NULL,
kelas TEXT NOT NULL,
umur INTEGER,
email TEXT UNIQUE
);Beberapa tipe data umum SQLite:
| Tipe | Keterangan |
|---|---|
INTEGER |
Bilangan bulat |
REAL |
Bilangan desimal |
TEXT |
Teks |
BLOB |
Data biner |
NULL |
Nilai kosong |
SQLite memakai dynamic typing — kolom bisa menyimpan tipe apa pun, tapi sebaiknya tetap konsisten dengan tipe yang dideklarasikan.
CRUD Dasar #
INSERT (menambah data) #
INSERT INTO siswa (nama, kelas, umur, email)
VALUES ('Budi Santoso', '8A', 13, 'budi@contoh.id');
INSERT INTO siswa (nama, kelas, umur) VALUES
('Siti Aminah', '8A', 13),
('Andi Pratama', '8B', 14),
('Dewi Lestari', '8A', 13);SELECT (membaca data) #
SELECT * FROM siswa;
SELECT nama, kelas FROM siswa WHERE kelas = '8A';
SELECT COUNT(*) FROM siswa;UPDATE (mengubah data) #
UPDATE siswa SET umur = 14 WHERE nama = 'Budi Santoso';DELETE (menghapus data) #
DELETE FROM siswa WHERE nama = 'Andi Pratama';Perintah CLI yang Berguna #
| Perintah | Fungsi |
|---|---|
.tables |
Lihat semua tabel |
.schema siswa |
Lihat struktur pembuatan tabel |
.mode column |
Tampilkan hasil dalam kolom rapi |
.headers on |
Tampilkan baris header |
.output file.txt |
Simpan hasil ke file |
.dump |
Export seluruh database ke SQL |
.backup nama.db |
Backup database |
Contoh tampilan rapi:
.mode column
.headers on
SELECT * FROM siswa;Backup dan Restore #
Backup #
sqlite3 dataku.db ".backup 'backup.db'"atau export ke file SQL:
sqlite3 dataku.db .dump > backup.sqlRestore #
sqlite3 dataku_baru.db < backup.sqlIntegrasi dengan Python #
Python punya modul sqlite3 bawaan — tidak perlu install apa pun.
import sqlite3
# Membuka koneksi (membuat file jika belum ada)
conn = sqlite3.connect("dataku.db")
cur = conn.cursor()
# Membuat tabel
cur.execute("""
CREATE TABLE IF NOT EXISTS siswa (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nama TEXT NOT NULL,
kelas TEXT NOT NULL
)
""")
# Insert data
cur.execute("INSERT INTO siswa (nama, kelas) VALUES (?, ?)", ("Budi", "8A"))
# Commit dan baca
conn.commit()
for row in cur.execute("SELECT * FROM siswa"):
print(row)
conn.close()Gunakan ? sebagai placeholder untuk mencegah SQL injection — jangan pernah menyusun query dengan string concatenation.
Integrasi dengan Node.js #
Pakai better-sqlite3 (sinkron dan cepat):
npm install better-sqlite3const Database = require('better-sqlite3');
const db = new Database('dataku.db');
db.exec(`
CREATE TABLE IF NOT EXISTS siswa (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nama TEXT NOT NULL,
kelas TEXT NOT NULL
)
`);
const insert = db.prepare('INSERT INTO siswa (nama, kelas) VALUES (?, ?)');
insert.run('Budi', '8A');
const siswa = db.prepare('SELECT * FROM siswa').all();
console.log(siswa);
db.close();Best Practices #
- Backup rutin — cukup salin file
.dbsaat aplikasi berhenti menulis. - Gunakan transaksi untuk banyak operasi sekaligus agar lebih cepat dan aman.
- Pakai placeholder (
?) untuk mencegah SQL injection. - Jangan taruh database di repository — tambahkan
*.dbke.gitignore. - WAL mode — aktifkan
PRAGMA journal_mode=WAL;untuk performa baca-tulis bersamaan yang lebih baik.
PRAGMA journal_mode=WAL;Troubleshooting #
Error: database is locked
#
SQLite mengizinkan satu penulis pada satu waktu. Ini sering terjadi saat dua proses menulis bersamaan. Solusi: aktifkan WAL mode, atau pastikan koneksi sebelumnya sudah ditutup.
File .db tidak ada padahal sudah insert data
#
Kemungkinan transaksi belum di-commit. Pastikan memanggil conn.commit() (Python) atau db.exec('COMMIT').
Kolom tidak ditemukan #
Periksa nama kolom dengan .schema nama_tabel. SQLite case-insensitive untuk nama tabel/kolom, tapi sebaiknya konsisten.
Keamanan #
- SQLite tidak punya autentikasi user — keamanan bergantung pada file system.
- Batasi izin baca/tulis file
.dbhanya untuk user yang menjalankan aplikasi. - Hindari menyimpan data sensitif tanpa enkripsi; gunakan SQLCipher jika perlu enkripsi.
- Selalu gunakan parameterized query untuk mencegah SQL injection.
Ringkasan Perintah #
Membuat database dan tabel:
sqlite3 dataku.dbCREATE TABLE siswa (id INTEGER PRIMARY KEY, nama TEXT, kelas TEXT);
INSERT INTO siswa (nama, kelas) VALUES ('Budi', '8A');
SELECT * FROM siswa;Backup:
sqlite3 dataku.db .dump > backup.sqlDokumentasi resmi: sqlite.org