Ketika dua orang mentransfer uang pada saat bersamaan, sebagian langkah boleh gagal tanpa merusak saldo. Transaksi menjamin rangkaian perintah berlaku seluruhnya atau tidak sama sekali. Section ini menguji setiap mekanisme transaksi MySQL secara langsung.
Pahami mengapa pembaruan data multi-langkah membutuhkan transaksi: masalah transfer uang yang gagal di tengah jalan, definisi transaksi sebagai unit kerja all-or-nothing, serta perilaku autocommit MySQL yang menjalankan setiap statement sebagai transaksi tersendiri.
Buka → # START TRANSACTIONBedah cara membuka transaksi eksplisit di MySQL: START TRANSACTION, sinonim BEGIN dan BEGIN WORK, mode SET autocommit = 0 dengan transaksi implisit yang berkelanjutan, akibat koneksi terputus tanpa COMMIT, serta bukti nyata bahwa statement DDL menyebabkan implicit commit yang menggagalkan ROLLBACK.
Buka → # COMMIT dan ROLLBACKBedah dua penutup transaksi MySQL: COMMIT yang mengukuhkan seluruh perubahan secara permanen, ROLLBACK yang membatalkannya kembali, aturan visibilitas antar-koneksi yang hanya menampilkan data setelah COMMIT, perilaku error di tengah transaksi yang tidak membatalkan statement sebelumnya, dan preview ROLLBACK TO SAVEPOINT.
Buka → # SAVEPOINTKuasai pembatalan parsial transaksi dengan SAVEPOINT: membuat penanda bernama di tengah transaksi, ROLLBACK TO SAVEPOINT yang membatalkan hanya sebagian langkah sambil menjaga transaksi tetap hidup, RELEASE SAVEPOINT untuk melepas penanda, savepoint bertingkat, use case wizard multi-langkah, dan error 1305 saat savepoint tidak dikenal.
Buka → # ACID PropertiesBedah empat jaminan transaksi InnoDB: Atomicity yang dibuktikan lewat ROLLBACK total, Consistency yang diuji dengan pelanggaran foreign key di tengah transaksi, Isolation yang menjelaskan dirty read antar-koneksi, serta Durability yang dijamin redo log, dirangkum dalam tabel A-C-I-D beserta mekanisme MySQL di balik tiap huruf.
Buka → # Isolation LevelsBedah empat isolation level InnoDB — READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, dan SERIALIZABLE — beserta anomali dirty read, nonrepeatable read, dan phantom read milik tiap level, pengujian SET SESSION TRANSACTION ISOLATION LEVEL dengan bukti nilai @@transaction_isolation, snapshot konsisten, dan skenario dua koneksi berbasis tabel waktu.
Buka → # LockingBedah mekanisme kunci InnoDB: row lock yang dipasang statement DML di dalam transaksi, SELECT FOR UPDATE dan FOR SHARE untuk mengunci baris sebelum dibaca, LOCK TABLES beserta mode READ dan WRITE yang dibuktikan dengan error 1099, gap lock sebagai penjaga rentang, serta perbandingan shared lock dan exclusive lock.
Buka → # DeadlocksBedah kebuntuan InnoDB: skenario klasik dua transaksi yang saling menunggu kunci, simulasi waktu t1 sampai t6 dengan diagram sequence dua koneksi, deteksi otomatis InnoDB yang membatalkan satu korban dengan ERROR 1213, pembacaan LATEST DETECTED DEADLOCK pada SHOW ENGINE INNODB STATUS, serta pola pencegahan lewat urutan akses konsisten, transaksi pendek, dan index yang tepat.
Buka → # Penanganan KonkurensiRangkai pola praktis mengelola akses bersamaan: masalah lost update pada pembacaan-then-tulisan dua sesi, pessimistic locking dengan SELECT FOR UPDATE untuk pola ambil-transfer-unggah, optimistic locking dengan kolom versi yang terbukti lewat 0 rows affected, idempotency key yang menjadikan retry aman, serta checklist urutan kerja konkurensi yang aman.
Buka →