Menu

View SQLite: CREATE VIEW, View Sementara, dan INSTEAD OF

Cara kerja view di SQLite: menyimpan query sebagai tabel virtual, kapan memakai view sementara, dan kenapa view di SQLite secara default hanya bisa dibaca.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

View Adalah Query yang Disimpan

View adalah pernyataan SELECT yang diberi nama. Setelah dibuat, kamu bisa melakukan query terhadapnya seperti tabel, tapi tidak ada data yang disimpan. Setiap kali kamu membaca view, SQLite menjalankan query di baliknya dari awal.

paid_orders terlihat dan berperilaku seperti tabel. Ia punya kolom, kamu bisa SELECT darinya, kamu bisa melakukan join dengannya. Tapi di balik layar, setiap query diperluas menjadi filter asli WHERE status = 'paid'.

Itulah seluruh model mentalnya: view adalah alias untuk sebuah query.

Kenapa View Berguna

Keuntungan utamanya adalah penamaan. Query yang rumit mendapat nama yang singkat dan deskriptif, dan sisa kodemu tetap mudah dibaca:

Tanpa view, setiap pemanggil harus menulis GROUP BY sendiri, dan salah satu dari mereka bisa saja salah menulis filternya. Dengan view, agregasinya didefinisikan sekali. Pemanggil cukup meminta customer_totals lalu menambahkan filter tambahan apa pun yang mereka butuhkan.

View juga bisa berfungsi sebagai batas ala hak akses. Jika sebuah query tidak boleh menampilkan kolom password_hash, buat view yang memilih semuanya kecuali kolom itu dan minta kode aplikasi memakai view tersebut.

Sintaks CREATE VIEW

Bentuk lengkapnya:

CREATE [TEMPORARY] VIEW [IF NOT EXISTS] view_name [(column_aliases)] AS
SELECT ...;

Beberapa hal yang perlu diketahui:

  • IF NOT EXISTS diam-diam melewati pembuatan jika view sudah ada.
  • TEMPORARY (atau TEMP) membuat view yang lenyap saat koneksi ditutup.
  • Alias kolom di dalam tanda kurung memungkinkanmu mengganti nama kolom view tanpa menyentuh SELECT di baliknya.

View ini menampilkan nama yang lebih ramah (item, dollars) tanpa mengganti nama kolom di tabel sumber.

Mengganti dan Menghapus View

SQLite tidak punya CREATE OR REPLACE VIEW atau ALTER VIEW. Untuk mengubah definisi view, hapus lalu buat ulang:

DROP VIEW IF EXISTS active_orders; adalah bentuk yang aman: tidak akan error jika view-nya tidak ada. Menghapus view tidak pernah memengaruhi tabel di baliknya; kamu hanya menghapus query yang tersimpan.

View Sementara

TEMP VIEW hanya ada selama koneksi database saat ini. Saat koneksi ditutup, view-nya hilang. Berguna untuk sesi analisis sesaat ketika kamu tidak ingin meninggalkan definisi:

View sementara juga memungkinkanmu menimpa sebuah nama query tanpa harus menetapkannya di skema, praktis saat sedang bereksplorasi.

Secara Default, View Hanya Bisa Dibaca

Inilah jebakan yang paling penting. Kamu tidak bisa melakukan INSERT, UPDATE, atau DELETE lewat view secara langsung:

sqlite> INSERT INTO paid_orders (customer, amount) VALUES ('Eve', 50);
Runtime error: cannot modify paid_orders because it is a view

Solusinya adalah trigger INSTEAD OF. Kamu menulis trigger yang berjalan sebagai ganti upaya penulisan itu dan menerjemahkannya menjadi operasi sungguhan pada tabel di baliknya:

View-nya tetap view, tapi penulisan terhadapnya sekarang punya tujuan. Kita akan membahas trigger secara lengkap di halaman berikutnya.

Tidak Ada Materialized View, Buat Sendiri

Beberapa database memungkinkanmu menyimpan hasil view di disk sebagai cache dan memperbaruinya sesuai kebutuhan. SQLite tidak. Setiap pembacaan view menjalankan ulang query di baliknya. Untuk sebagian besar beban kerja itu tidak masalah, karena SQLite cepat dan query planner-nya bagus. Untuk agregasi mahal yang di-query berkali-kali, buat tabel sungguhan dan jaga sendiri agar tetap sinkron:

Setelah itu kamu memperbarui cache-nya secara terjadwal, atau memasang trigger pada orders agar tetap mutakhir. Ini pekerjaan manual, tapi juga satu-satunya pilihan di SQLite.

Melihat Daftar View

Metadata view tersimpan di sqlite_master bersama tabel dan index:

Kolom sql mengembalikan pernyataan CREATE VIEW aslinya, berguna saat kamu lupa apa yang dilakukan sebuah view. Di CLI, .schema view_name mencetak hal yang sama dengan lebih rapi.

Kapan Memakai View

View sepadan dipakai saat:

  • Query yang tidak sederhana dipakai ulang di tiga tempat atau lebih. Memberinya nama sekali lebih baik daripada copy-paste.
  • Kamu ingin menampilkan sebagian kolom atau baris pilihan ke bagian tertentu aplikasi.
  • Sebuah agregasi secara konsep adalah satu hal (monthly_sales, active_users) yang sebaiknya diperlakukan pemanggil sebagai kata benda.

Lewati view saat:

  • Query-nya hanya dipakai di satu tempat. Tulis langsung saja.
  • Performa penting dan query di baliknya mahal: kamu membayar biaya itu pada setiap pembacaan. Simpan ke tabel sungguhan sebagai cache.
  • View itu bergantung pada view lain yang bergantung pada view lain lagi. SQLite menangani sarang seperti ini dengan baik, tapi rantai tiga atau empat view membuat SQL sebenarnya sulit diikuti saat debugging.

Berikutnya: Trigger

View dan trigger sering muncul bersama: pola INSTEAD OF yang membuat view bisa ditulisi adalah salah satu alasan utama trigger ada. Trigger juga berguna dengan sendirinya untuk log audit, update berantai, dan menegakkan invarian. Itu halaman berikutnya.

Pertanyaan yang sering diajukan

Apa itu view di SQLite?

View adalah pernyataan SELECT tersimpan yang bisa kamu query seperti tabel. View tidak menyimpan data apa pun: setiap kali kamu membacanya, SQLite menjalankan ulang query di baliknya. View berguna untuk memberi nama pada query yang rumit sekali saja lalu memakainya di mana-mana, atau untuk menyembunyikan kolom yang tidak boleh dilihat pemanggil.

Bisakah melakukan INSERT atau UPDATE lewat view di SQLite?

Tidak secara langsung. View di SQLite hanya bisa dibaca: INSERT, UPDATE, dan DELETE terhadap view akan gagal. Kamu bisa membuat view bisa ditulisi dengan memasang trigger INSTEAD OF yang menerjemahkan penulisan itu menjadi operasi pada tabel di baliknya.

Apakah SQLite mendukung materialized view?

Tidak. SQLite hanya punya view biasa (virtual): query-nya berjalan setiap kali kamu membaca view. Jika kamu butuh hasil yang di-cache, buat tabel sungguhan lalu perbarui sendiri, atau pakai trigger agar tetap sinkron dengan tabel sumber.

Bagaimana cara melihat daftar semua view di database SQLite?

Query sqlite_master: SELECT name FROM sqlite_master WHERE type = 'view';. Di CLI, .schema menampilkan pernyataan CREATE VIEW dan .tables mencantumkan view bersama tabel.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai