Penjelasan Transaksi SQL dan ACID: COMMIT, ROLLBACK dan Tingkat Isolasi

  1. Beranda
  2. Blog
  3. Database & SQL

Database & SQL

Penjelasan Transaksi SQL dan ACID: COMMIT, ROLLBACK, dan Tingkat Isolasi

Apa yang terjadi jika server gagal di tengah proses pemindahan uang antar dua akun? Transaksi adalah jawabannya. Lihat cara kerjanya menggunakan contoh nyata, apa arti ACID, dan cara memilih tingkat isolasi.

9 menit baca
Transaksi SQL dan ACID menjelaskan: COMMIT, ROLLBACK dan tingkat isolasi

Poin penting

  • Sebuah transaksi mengelompokkan pernyataan-pernyataan sehingga semuanya berhasil atau gagal secara bersamaan.
  • COMMIT membuat perubahan menjadi permanen, dan ROLLBACK membatalkannya.
  • ACID berarti atomisitas, konsistensi, isolasi, dan daya tahan.
  • Isolasi yang lebih kuat mencegah lebih banyak anomali, namun dapat mengurangi konkurensi, jadi pilihlah dengan hati-hati.

Memindahkan 300 rupee dari Asha ke Ben memerlukan dua pembaruan: kurangi dari satu akun dan tambahkan ke akun lainnya. Jika sistem di antara mereka gagal, uang akan hilang. Transaksi SQL ada untuk mewujudkan hal tersebut, dengan memperlakukan kedua langkah sebagai satu kesatuan.

Dalam panduan ini kita membahas penerapan, pengembalian, dan kegagalan pada tabel akun kecil. Kami menjalankan contoh tersebut di SQLite, dan saldo yang ditampilkan berasal dari proses tersebut. Perintah dasarnya serupa di seluruh database, tetapi perilaku penguncian dan isolasi sangat bervariasi, jadi kami menunjukkan tempat untuk memeriksa dokumentasi database Anda.

Apa itu transaksi?

Transaksi adalah urutan satu atau lebih pernyataan SQL yang diperlakukan database sebagai operasi logis tunggal. Ini meja kami:

CREATE TABLE accounts (
  id INT PRIMARY KEY,
  owner TEXT,
  balance INT CHECK (balance >= 0)
);

INSERT INTO accounts VALUES (1, 'Asha', 1000), (2, 'Ben', 200);

Batasan CHECK adalah aturan bahwa saldo tidak akan pernah berada di bawah nol, yang akan kita gunakan nanti. Perhatikan bahwa sintaks untuk memulai transaksi bervariasi: SQLite dan PostgreSQL menerima BEGIN, MySQL juga memiliki START TRANSACTION, dan SQL Server menggunakan BEGIN TRANSACTION.

Di luar transaksi eksplisit, sebagian besar database menggunakan komit otomatis, di mana setiap pernyataan disimpan segera setelah selesai. Oracle adalah pengecualian penting, karena sesi di sana tetap ada dalam transaksi sampai Anda melakukan commit.

COMMIT: menjadikannya permanen

BEGIN;
UPDATE accounts SET balance = balance - 300 WHERE id = 1;
UPDATE accounts SET balance = balance + 300 WHERE id = 2;
COMMIT;

-- Asha | 700
-- Ben  | 500

Sampai COMMIT dijalankan, perubahannya bersifat sementara. Setelah berhasil kembali, database menjamin bahwa mereka disimpan. Total di kedua akun tetap di angka 1.200, yang merupakan inti dari latihan ini.

ROLLBACK: batalkan semuanya

ROLLBACK membatalkan semuanya sejak transaksi dimulai:

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
SELECT owner, balance FROM accounts;
-- Asha | 600   (visible inside this transaction)
-- Ben  | 500

ROLLBACK;
SELECT owner, balance FROM accounts;
-- Asha | 700   (back to where it was)
-- Ben  | 500

Rollback juga terjadi secara otomatis jika koneksi terputus atau server crash sebelum Anda melakukan commit, sehingga transaksi setengah jadi tidak dapat bertahan.

Ketika sebuah pernyataan gagal

Ini adalah kasus yang lebih realistis. Asha mencoba mengirim 5000, yang tidak dapat ditampung oleh akun tersebut. Kredit ke Ben berjalan terlebih dahulu, lalu debitnya melanggar aturan CHECK:

BEGIN;
UPDATE accounts SET balance = balance + 5000 WHERE id = 2;
UPDATE accounts SET balance = balance - 5000 WHERE id = 1;
-- error: CHECK constraint failed: balance >= 0

ROLLBACK;

-- Asha | 700
-- Ben  | 500

Tanpa transaksi tersebut, Ben akan menyimpan 5.000 itu dan pembukuannya akan salah. Perhatikan satu detail penting: pernyataan yang gagal tidak selalu membatalkan transaksi dengan sendirinya. Di SQLite dan MySQL, misalnya, pernyataan sebelumnya mungkin masih tertunda, jadi kode Anda harus melakukan rollback. PostgreSQL malah menandai seluruh transaksi sebagai dibatalkan dan menolak pernyataan lebih lanjut sampai Anda melakukan roll back.

Dalam kode aplikasi, selalu pasangkan transaksi dengan penanganan kesalahan. Inilah ide dalam Python, dan panduan kami untuk penanganan pengecualian Python menjelaskan sintaksisnya:

try:
    conn.execute("BEGIN")
    conn.execute(debit_sql, values)
    conn.execute(credit_sql, values)
    conn.execute("COMMIT")
except Exception:
    conn.execute("ROLLBACK")
    raise

titik simpanan

Savepoint menandai posisi di dalam transaksi, sehingga Anda hanya dapat membatalkan sebagian pekerjaan:

BEGIN;
UPDATE accounts SET balance = balance - 50 WHERE id = 1;
SAVEPOINT bonus;
UPDATE accounts SET balance = balance + 999 WHERE id = 2;
ROLLBACK TO bonus;
UPDATE accounts SET balance = balance + 50 WHERE id = 2;
COMMIT;

-- Asha | 650
-- Ben  | 550

Bonus 999 dibatalkan, sedangkan sisa transaksi dilanjutkan dan dilakukan. Ini berguna untuk langkah opsional dalam proses yang panjang.

Sifat ACID dijelaskan

Properti Janji Dalam transfer kami
atomisitas Semua atau tidak sama sekali Kedua pembaruan tersebut terjadi, atau tidak keduanya
Konsistensi Aturan masih berlaku setelahnya Tidak ada keseimbangan yang dapat melanggar aturan CHECK.
Isolasi Pekerjaan bersamaan tidak mengganggu Yang lain tidak melihat transfer setengah jadi
Daya tahan Data yang berkomitmen bertahan dari kegagalan Pemadaman listrik setelah COMMIT tidak kehilangan apa pun

Konsistensi sering disalahpahami. Basis data hanya menerapkan aturan yang Anda deklarasikan, seperti batasan dan kunci asing. Ini tidak akan menghentikan kode Anda untuk mentransfer jumlah yang salah. Daya tahan biasanya dicapai dengan log write-ahead, di mana perubahan dicatat dengan aman pada disk sebelum penerapan dikonfirmasi.

Apa yang terjadi dengan transaksi bersamaan?

Kami membuka dua koneksi ke satu file SQLite. Yang pertama memulai transaksi dan memperbarui baris dari 1 menjadi 2, tanpa melakukan apa pun. Inilah yang dilihat oleh koneksi kedua:

Connection B reads:   1                     -- no uncommitted data
Connection B writes:  database is locked    -- it has to wait
(A commits)
Connection B reads:   2                     -- now it sees the change

SQLite hanya mengizinkan satu penulis pada satu waktu, yang lebih sederhana daripada database server, di mana banyak transaksi dapat menulis baris berbeda secara bersamaan. Namun prinsipnya sama: sesi lain tidak akan melihat perubahan yang tidak dikomit dalam pengaturan normal, dan penulisan yang bertentangan harus menunggu. Dalam pengujian kami, kami mengatur koneksi kedua untuk segera menyerah daripada menunggu, sehingga kesalahan langsung muncul.

Baca anomali

Ketika transaksi tumpang tindih, masalah tertentu bisa terjadi. Standar SQL mendefinisikan ini dalam kaitannya dengan apa yang mungkin diamati dalam suatu transaksi:

Anomali Apa yang terjadi
Bacaan kotor Anda membaca perubahan yang belum dilakukan transaksi lain, dan perubahan tersebut nantinya dapat dibatalkan
Bacaan yang tidak dapat diulang Anda membaca baris dua kali dalam satu transaksi dan mendapatkan nilai yang berbeda, karena seseorang melakukan komitmen di antara keduanya
Hantu membaca Anda menjalankan kueri yang sama dua kali dan mendapatkan baris tambahan atau baris yang hilang, karena seseorang menyisipkan atau menghapus beberapa baris

Masalah lainnya adalah pembaruan yang hilang. Dua sesi membaca saldo 100, masing-masing menambahkan 10 dan masing-masing menulis 110. Satu pembaruan secara efektif hilang, padahal jawabannya seharusnya 120.

Tingkat isolasi SQL

Tingkat isolasi memungkinkan Anda menukar ketelitian dengan konkurensi. Inilah yang diizinkan oleh standar SQL di setiap level:

Tingkat Bacaan kotor Bacaan yang tidak dapat diulang Hantu membaca
Baca tanpa komitmen Mungkin Mungkin Mungkin
Baca berkomitmen Dicegah Mungkin Mungkin
Bacaan berulang Dicegah Dicegah Mungkin
Dapat diserialkan Dicegah Dicegah Dicegah
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

Sintaks dan perilaku yang tepat bergantung pada database Anda. Standarnya juga berbeda: PostgreSQL dan SQL Server menggunakan komitmen baca, sedangkan InnoDB MySQL menggunakan pembacaan berulang. Beberapa database memberikan jaminan yang lebih kuat dari yang disyaratkan standar, atau memperlakukan satu level sebagai level lainnya. Di PostgreSQL, misalnya, read uncommit berperilaku seperti read commit. Selalu baca dokumentasi database Anda sebelum mengandalkan perilaku tertentu.

Tips: Untuk pembaruan yang hilang, lakukan perubahan dalam satu pernyataan, seperti pada UPDATE accounts SET balance = balance + 10. Melakukan perhitungan dalam aplikasi Anda dari pembacaan sebelumnya itulah yang membuka kesenjangan.

Kebuntuan

Kebuntuan terjadi ketika dua transaksi masing-masing memiliki kunci yang dibutuhkan transaksi lainnya. Transaksi A mengunci baris 1 dan menginginkan baris 2, sedangkan transaksi B mengunci baris 2 dan menginginkan baris 1. Tidak ada yang dapat melanjutkan.

Database seperti PostgreSQL, MySQL dan SQL Server mendeteksi hal ini dan membatalkan satu transaksi dengan kesalahan. Itu adalah perilaku normal, dan aplikasi Anda harus siap menghadapinya. Untuk mengurangi kebuntuan, selalu perbarui baris dalam urutan yang konsisten, seperti ID akun terendah terlebih dahulu, persingkat transaksi, dan coba lagi ketika salah satu dipilih sebagai korban.

Praktik terbaik

  • Jaga transaksi tetap singkat. Transaksi panjang akan mengunci dan memblokir pengguna lain.
  • Jangan pernah menunggu pengguna atau API yang lambat di dalam transaksi. Lakukan pekerjaan itu sebelum Anda memulai, atau setelahnya.
  • Selalu tangani kegagalan. Setiap jalur harus diakhiri dengan penerapan atau rollback.
  • Tambahkan batasan. Batasan ini memberikan aturan nyata pada database untuk ditegakkan. desain tabel yang bagus juga membantu.
  • Gunakan indeks. Pencarian yang lebih cepat berarti penguncian akan ditahan dalam waktu yang lebih singkat.
  • Hati-hati saat mencoba ulang. Coba lagi saat kebuntuan, namun pastikan bahwa operasi tidak dapat dilakukan dua kali.
  • Menguji konkurensi dengan sengaja. Banyak dari bug ini hanya muncul saat dimuat, jadi tes integrasi dasar saja mungkin tidak dapat mengungkapnya.

Penutup

Transaksi mengubah beberapa langkah berisiko menjadi satu operasi yang aman, dan ACID menjelaskan jaminan yang menjadikannya dapat dipercaya. Setiap kali suatu tindakan bisnis menyentuh lebih dari satu baris atau tabel, tanyakan pada diri Anda apa yang akan terjadi jika tindakan tersebut berhenti di tengah jalan. Jika jawabannya membuat Anda khawatir, bungkuslah dalam sebuah transaksi. Untuk berlatih, buka dua sesi di database lokal dan coba buat sendiri anomalinya.

Pertanyaan yang sering diajukan

Apa itu transaksi di SQL?

Transaksi adalah sekelompok pernyataan SQL yang diperlakukan sebagai satu unit. Entah semuanya disimpan dengan COMMIT, atau semuanya dibatalkan dengan ROLLBACK.

Apa properti ACID dalam database?

ACID adalah singkatan dari atomisitas, konsistensi, isolasi, dan daya tahan. Bersama-sama, mereka memastikan transaksi selesai atau tidak sama sekali, menjaga aturan tetap utuh, tidak mengganggu, dan bertahan dari kegagalan.

Apa perbedaan antara KOMITMEN dan ROLLBACK?

COMMIT secara permanen menyimpan semua perubahan yang dilakukan dalam transaksi. ROLLBACK membatalkannya dan mengembalikan data seperti sebelum transaksi dimulai.

Apa itu bacaan kotor?

Pembacaan kotor adalah ketika satu transaksi membaca perubahan yang lain belum dilakukan. Jika transaksi lainnya dibatalkan, data yang dibaca tidak pernah benar-benar ada.

Tingkat isolasi manakah yang harus saya gunakan?

Mulailah dengan default database Anda, yang biasanya baik-baik saja. Gunakan serializable untuk logika kritis ketika anomali tidak dapat diterima, dan bersiaplah untuk mencoba kembali transaksi yang gagal.

Teruslah belajar

Bekerja dengan Stack Quora

Butuh bantuan dengan pengujian, WordPress atau SEO?

Kami membantu tim mengirimkan perangkat lunak yang lebih baik dan mengembangkan situs mereka. Beritahu kami apa yang sedang Anda kerjakan dan kami akan menyarankan langkah selanjutnya yang jelas.

Teruslah membaca

Panduan lebih lanjut tentang pengujian, AI & pengembangan modern

Menikmati artikel ini? Pilih topik dan langsung masuk ke tutorial terbaru kami.

Kecerdasan buatan

Penjelasan Halusinasi AI: Mengapa Model Bahasa Memperbaiki Masalah dan Cara Menguranginya

Halusinasi AI menjelaskan: apa itu, mengapa model bahasa memproduksinya, tipe umum, cara menguranginya dengan landasan dan petunjuk, dan pemeriksaan…

Baca artikel →
DevOps

Penjelasan Variabel Lingkungan: File .env, Rahasia, dan Konfigurasi Dilakukan dengan Benar

Variabel lingkungan dijelaskan dengan contoh Python yang kami jalankan: membaca dan mengaturnya, mengapa setiap nilai berupa string, file .env, pewa…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Pembatasan Kecepatan API: Algoritma, Header, dan Penanganan 429 Kesalahan

Pembatasan laju API dijelaskan dengan simulasi yang kami jalankan: keranjang token, jendela tetap, jendela geser, respons 429, header batas laju, pe…

Baca artikel →
Otomatisasi pengujian

Mengejek dengan Python: unittest.mock, patch dan Kesalahan yang Membuat Tes Berbohong

Mengejek dengan Python dengan unittest.mock, menguji: Mock dan return_value, side_effect, menambal di mana nama digunakan, spesifikasi dan autospec,…

Baca artikel →
Pengujian perangkat lunak

Penjelasan Cakupan Kode: Cakupan Jalur vs Cabang dan Apa Arti 100% Sebenarnya

Cakupan kode dijelaskan dengan coverage.py yang sebenarnya dijalankan: cakupan garis, cabang dan kondisi, membaca laporan, mengapa cakupan 100% masi…

Baca artikel →
Basis data & SQL

DELETE vs TRUNCATE vs DROP dalam SQL: Perbedaan, Rollback dan Kapan Menggunakan Masing-Masing

DELETE vs TRUNCATE vs DROP dijelaskan dengan SQL yang diuji: apa yang dihapus, rollback, pemicu, reset identitas, kecepatan, dan perbedaan PostgreSQ…

Baca artikel →
Basis data & SQL

Penjelasan Tampilan SQL: Membuat, Menggunakan, dan Menghindari Kesalahan, Dengan Contoh

Tampilan SQL dijelaskan dengan kueri yang kami jalankan: membuat tampilan, hasil langsung, menyembunyikan kolom, kinerja, tampilan yang dapat diperb…

Baca artikel →
Pengembangan perangkat lunak

Antarmuka TypeScript vs Tipe: Perbedaan Nyata, Diuji Dengan Kompiler

Antarmuka TypeScript vs tipe, diperiksa dengan kompiler sebenarnya: apa yang bisa dilakukan keduanya, apa yang hanya bisa dilakukan satu orang, peng…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Python *args dan **kwargs: Fungsi Fleksibel Dengan Contoh Jelas

Python *args dan **kwargs dijelaskan dengan kode yang kami jalankan: pengepakan dan pembongkaran, urutan parameter, argumen hanya kata kunci dan pos…

Baca artikel →
Pengembangan perangkat lunak

Fungsi Python Lambda: Sintaks, Kegunaan Sebenarnya, dan Kapan Tidak Digunakan

Fungsi python lambda dijelaskan dengan kode yang kami jalankan: sintaksis, pengurutan dengan kunci, peta dan filter, penutupan, jebakan pengikatan a…

Baca artikel →
Kecerdasan buatan

Apa Itu Agen AI? Cara Kerjanya, Dengan Agent Loop Sederhana yang Dapat Anda Jalankan

Apa itu agen AI? Panduan sederhana tentang loop agen, alat, memori, dan pagar pembatas, dengan loop Python kecil yang kami jalankan, risiko nyata da…

Baca artikel →
DevOps

Pemantauan vs Observabilitas: Perbedaan Nyata, Dengan Log, Metrik, dan Jejak

Penjelasan pemantauan vs observabilitas: kegagalan yang diketahui dan tidak diketahui, log, metrik dan jejak, penelusuran insiden checkout, sinyal e…

Baca artikel →
DevOps

Volume Docker vs Bind Mounts: Pertahankan Data Kontainer dengan Cara yang Benar

Volume Docker vs pengikatan pengikat dijelaskan: mengapa data kontainer menghilang, volume yang diberi nama, pengikatan pengikatan, tmpfs, contoh Tu…

Baca artikel →
Otomatisasi pengujian

TDD vs BDD: Perbedaan Utama, Satu Fitur Dibangun dengan Dua Cara dan Kapan Menggunakan Masing-masing

TDD vs BDD dijelaskan dengan satu fitur diskon yang dibuat dengan dua cara: refactor merah-hijau dengan kode yang kami jalankan, skenario Mengingat-…

Baca artikel →
Pengujian perangkat lunak

User Acceptance Testing (UAT): Proses, Checklist dan Contoh Nyata

Pengujian penerimaan pengguna menjelaskan: siapa yang menjalankannya, perbedaannya dengan QA, proses tujuh langkah, templat kasus uji UAT, daftar pe…

Baca artikel →
Basis data & SQL

Penjelasan Nilai NULL SQL: IS NULL, COALESCE, NULLIF dan Jebakan yang Harus Dihindari

Nilai SQL NULL dijelaskan dengan kueri yang kami jalankan: logika tiga nilai, IS NULL, COALESCE, NULLIF, cara agregat, penggabungan, dan pengurutan …

Baca artikel →
Basis data & SQL

Pernyataan SQL CASE WHEN: Sintaks, Contoh Nyata dan Kesalahan Umum

SQL CASE KETIKA dijelaskan dengan kueri yang kami jalankan: formulir sederhana dan dicari, urutan kondisi, pivot dengan SUM, trik COUNT, pengurutan …

Baca artikel →
Pengembangan perangkat lunak

Apa itu JWT? Token Web JSON Dijelaskan Dengan Contoh Kerja

Apa itu JWT? JSON Web Tokens menjelaskan: tiga bagian, token yang dibuat dan dirusak dalam kode yang kami jalankan, sesi JWT vs, penyimpanan, token …

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Loop Acara JavaScript: Call Stack, Microtasks, dan Timer Dengan Contoh

Perulangan peristiwa JavaScript dijelaskan dengan kode yang kami jalankan: tumpukan panggilan, antrian tugas dan tugas mikro, mengapa setTimeout 0 t…

Baca artikel →
Pengembangan perangkat lunak

Generator Python dan Penjelasan Hasil: Menghemat Memori Dengan Contoh Nyata

Generator dan hasil Python dijelaskan dengan kode yang kami jalankan: bagaimana mereka menjeda dan melanjutkan, mengukur penghematan memori, saluran…

Baca artikel →
Kecerdasan buatan

Apa itu Embedding? Kesamaan Vektor dan Kosinus Dijelaskan Secara Sederhana

Apa itu embeddings? Panduan bahasa sederhana tentang vektor, kesamaan kosinus, dan penelusuran semantik, dengan contoh kecil yang kami jalankan, pen…

Baca artikel →
DevOps

Penerapan Biru-Hijau vs Canary: Perbedaan, Kompromi, dan Cara Memilih

Penjelasan penerapan blue-green vs canary: cara kerja masing-masing, biaya, risiko dan rollback, pengelompokan pengguna stabil yang kami uji, migras…

Baca artikel →
Otomatisasi pengujian

Tes Tidak Stabil: Apa Penyebabnya dan Cara Memperbaikinya untuk Kebaikan

Pengujian yang tidak stabil dijelaskan dengan demo yang kami jalankan: penyebab utama, cara mengonfirmasi dan mendiagnosisnya, perbaikan waktu yang …

Baca artikel →
Pengujian perangkat lunak

Load Testing vs Stress Testing: Perbedaan, Metrik dan Contoh k6

Penjelasan pengujian beban vs pengujian stres: apa yang dibuktikan masing-masing, pengujian lonjakan dan rendam, metrik yang penting, mengapa rata-r…

Baca artikel →
Pengujian perangkat lunak

Kasus Uji vs Skenario Uji: Perbedaan Utama, Contoh, dan Kapan Menggunakan Masing-masing

Penjelasan kasus uji vs skenario pengujian: definisi yang jelas, tabel berdampingan, satu fitur pengaturan ulang kata sandi yang diambil dari skenar…

Baca artikel →
Basis data & SQL

Optimasi Kueri SQL: Baca Rencana Eksekusi dan Perbaiki Kueri Lambat, Dengan Pengaturan Waktu

Pengoptimalan kueri SQL diuji pada sejuta baris: membaca rencana eksekusi, menambahkan indeks yang tepat, memperbaiki filter yang tidak dapat disarg…

Baca artikel →
Basis data & SQL

SQL UNION vs UNION ALL: Perbedaan, Contoh dan Kinerja Diuji

SQL UNION vs UNION ALL dijelaskan dengan kueri yang kami jalankan: duplikat, aturan yang diikuti keduanya, bug data nyata, kinerja terukur, INTERSEC…

Baca artikel →
Pengembangan perangkat lunak

Tutorial API Pengambilan JavaScript: GET, POST, Penanganan Kesalahan, dan Batas Waktu

Tutorial JavaScript Fetch API diuji pada server lokal: GET dan POST, mengapa 404 tidak muncul, bantuan yang dapat digunakan kembali, string kueri, b…

Baca artikel →
Pengembangan perangkat lunak

Penanganan File Python: Baca, Tulis, CSV, JSON dan pathlib Dengan Contoh

Penanganan file Python dijelaskan dengan kode yang kami jalankan: mode terbuka, dengan, membaca file besar, CSV, JSON, pathlib, file biner, penulisa…

Baca artikel →
Pengembangan perangkat lunak

Kelas dan Objek Python: Tutorial OOP Dengan Contoh Nyata

Kelas dan objek Python dijelaskan dengan kode yang kami jalankan: __init__, metode, atribut kelas vs instance, warisan, properti, metode dunder, kel…

Baca artikel →
Kecerdasan buatan

Apa Itu Model Bahasa Besar? Bagaimana LLM Bekerja, Dijelaskan Tanpa Hype

Apa yang dimaksud dengan model bahasa besar? LLM dijelaskan dalam bahasa sederhana: token, penyematan, perhatian, pelatihan, jendela suhu dan kontek…

Baca artikel →
DevOps

Perintah Linux untuk Pemula: Panduan Terminal Penting Dengan Contoh

Perintah Linux untuk pemula, dikelompokkan berdasarkan tugas: navigasi, file, melihat log, grep, pipa, izin, proses dan arsip, dengan contoh analisi…

Baca artikel →
Otomatisasi pengujian

Selenium vs Penulis Drama: Perbedaan Utama, Perbandingan Kode, dan Mana yang Harus Dipilih

Selenium vs Playwright dibandingkan: arsitektur, menunggu, dukungan browser dan bahasa, debugging, pengujian yang sama di kedua alat, saran migrasi …

Baca artikel →
Pengujian perangkat lunak

Partisi Ekivalensi: Teknik Desain Tes Dijelaskan Dengan Contoh yang Dikerjakan

Penjelasan partisi ekivalensi: cara menemukan partisi yang valid dan tidak valid, contoh yang berfungsi untuk usia, kata sandi dan kupon, pengujian …

Baca artikel →
Pengujian perangkat lunak

Severity vs Priority dalam Pengujian Perangkat Lunak: Perbedaan, Matriks dan Contoh Nyata

Keparahan vs prioritas dalam pengujian perangkat lunak dijelaskan: definisi yang jelas, matriks empat arah dengan contoh, skala level, siapa yang me…

Baca artikel →
Basis data & SQL

Tutorial Subkueri SQL: Jenis, Subkueri yang Berkorelasi, dan ADA Dengan Contoh

Tutorial subkueri SQL dengan kueri yang kami jalankan: subkueri skalar, IN, FROM dan SELECT, subkueri yang berkorelasi, EXISTS, jebakan NOT IN NULL …

Baca artikel →
Basis data & SQL

Penjelasan Transaksi SQL dan ACID: COMMIT, ROLLBACK dan Tingkat Isolasi

Transaksi SQL dan ACID dijelaskan dengan transfer bank yang kami jalankan: COMMIT, ROLLBACK, savepoint, kunci, tingkat isolasi, pembacaan kotor, keb…

Baca artikel →
Pengembangan perangkat lunak

Git merge vs rebase: perbedaan, contoh, dan kapan memakai masing-masing

Git merge vs rebase dijelaskan dengan keluaran log nyata, tabel perbandingan, aturan emas rebase, dan alur kerja tim yang aman.

Baca artikel →
Pengembangan perangkat lunak

List Comprehension Python: Sintaks, Contoh, dan Kapan Harus Dihindari

List comprehension Python dijelaskan: sintaks, filter, if-else, perulangan bersarang, waktu yang diukur, dan kapan perulangan for biasa lebih baik.

Baca artikel →
Basis data & SQL

Penjelasan SQL JOIN dengan Contoh (Inner, Left, Right, Full)

Pahami SQL JOIN langkah demi langkah dengan tabel dan query contoh: INNER, LEFT, RIGHT, FULL, CROSS, dan SELF, plus kesalahan umum dan tips performa.

Baca artikel →