PL/SQL - Transaksi: Panduan untuk Pemula
Hai sana, para ahli basis data masa depan! Hari ini, kita akan memulai perjalanan menarik ke dunia transaksi PL/SQL. Jangan khawatir jika Anda baru belajar programming; saya akan menjadi panduan ramah Anda, menjelaskan segala sesuatu langkah demi langkah. mari kita masuk ke dalam!
Apa Itu Transaksi?
Sebelum kita mulai, mari kita mengerti apa itu transaksi. Bayangkan Anda sedang mentransfer uang dari rekening tabungan Anda ke rekening cek Anda. Operasi ini melibatkan dua langkah:
- Mengurangi uang dari tabungan
- Menambah uang ke cek
Dua langkah ini bersama-sama membentuk sebuah transaksi. Ini sangat penting agar kedua langkah tersebut terjadi, atau keduanya tidak terjadi. Kita tidak ingin uang menghilang atau muncul dari udara!
Memulai dan Menyelesaikan Transaksi
Dalam PL/SQL, transaksi secara otomatis dimulai saat Anda menjalankan pertama kalinya pernyataan DML (Data Manipulation Language). Ini mencakup operasi INSERT, UPDATE, dan DELETE. Mari kita lihat contoh:
BEGIN
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (1001, 'John', 'Doe');
UPDATE employees
SET salary = 50000
WHERE employee_id = 1001;
END;
/
Dalam contoh ini, segera setelah pernyataan INSERT dieksekusi, sebuah transaksi dimulai. Transaksi ini terus berlanjut dengan pernyataan UPDATE.
Melakukan COMMIT pada Transaksi
Sekarang Anda mungkin berpikir, "Oke, kita sudah memulai transaksi, tapi bagaimana cara kita menyelesaikannya?" Pertanyaan bagus! Kita menggunakan pernyataan COMMIT untuk mengakhiri transaksi dan membuat semua perubahan permanen. Mari kita modifikasi contoh sebelumnya:
BEGIN
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (1001, 'John', 'Doe');
UPDATE employees
SET salary = 50000
WHERE employee_id = 1001;
COMMIT;
END;
/
Dengan menambahkan pernyataan COMMIT di akhir, kita mengatakan ke basis data, "Ya, saya yakin tentang perubahan ini. Harap membuatnya permanen."
Mengapa COMMIT Penting
Bayangkan Anda sedang memasak kue. Anda sudah mencampur semua bahan, tapi sampai Anda memasukkannya ke dalam oven, itu belum benar-benar menjadi kue. Demikian pula, sampai Anda COMMIT transaksi Anda, perubahan tersebut belum permanen di basis data.
Mengerikan Transaksi
kadang-kadang, hal-hal tidak berjalan seperti yang direncanakan. Mungkin Anda menyadari Anda membuat kesalahan dalam transaksi Anda. Jangan panik! PL/SQL memberikan kita jaring keselamatan yang disebut ROLLBACK. Itu seperti memiliki tombol "undo" untuk operasi basis data Anda.
BEGIN
UPDATE employees
SET salary = salary * 2; -- Ups! Kita tidak bermaksud menggandakan gaji semua orang!
ROLLBACK; -- Waw! Krisis terelakkan.
END;
/
Dalam contoh ini, kita secara tidak sengaja menggandakan gaji semua orang (tidak akan buruk kan?). Tetapi karena ROLLBACK, kita dapat mengurungkan perubahan ini sebelum ia menjadi permanen.
Kontrol Transaksi Otomatis
PL/SQL juga menyediakan kontrol transaksi otomatis dalam situasi tertentu. Mari kita lihat tabel dari scenario ini:
Scenario | Action |
---|---|
Akhir normal blok PL/SQL | COMMIT otomatis |
Kesalahan runtime selama transaksi | ROLLBACK otomatis |
Perintah SQL*Plus EXIT (tanpa COMMIT) | ROLLBACK otomatis |
Kecelakan sistem | ROLLBACK otomatis |
Contoh ROLLBACK Otomatis
BEGIN
UPDATE employees
SET salary = salary / 0; -- Ups! Kesalahan pembagian nol
END;
/
Dalam kasus ini, PL/SQL akan secara otomatis membatalkan transaksi karena kesalahan runtime.
Savepoints: Membuat Checkpoint dalam Transaksi Anda
kadang-kadang, Anda mungkin ingin membatalkan bagian dari transaksi, tapi tidak semua. Itulah tempat savepoints berguna. Mereka seperti checkpoint dalam permainan video - Anda dapat kembali ke mereka jika sesuatu sakit.
BEGIN
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (1002, 'Jane', 'Smith');
SAVEPOINT after_insert;
UPDATE employees
SET salary = 60000
WHERE employee_id = 1002;
-- Ups, kita mengubah pikiran tentang gaji
ROLLBACK TO after_insert;
COMMIT;
END;
/
Dalam contoh ini, kita memasukkan karyawan baru dan membuat savepoint. Kemudian kita memperbarui gaji, tapi memutuskan untuk kembali ke savepoint, mengurungkan pembaruan gaji tapi menjaga pemasaan.
Praktik Terbaik untuk Menggunakan Transaksi
- Perbaiki transaksi pendek: Transaksi yang berjalan lama dapat mengunci sumber daya dan mempengaruhi kinerja sistem.
- Gunakan pernyataan COMMIT eksplisit: Meskipun PL/SQL dapat secara otomatis melakukan commit dalam beberapa kasus, lebih baik untuk eksplisit tentang kapan Anda ingin mengcommit perubahan Anda.
- Penanganan pengecualian dengan benar: Pastikan untuk termasuk penanganan pengecualian yang tepat untuk menghindari commit atau rollback yang tidak diinginkan.
- Gunakan savepoints untuk transaksi kompleks: Jika Anda memiliki transaksi yang panjang, pertimbangkan menggunakan savepoints untuk mengijinkan rollback sebagian.
Kesimpulan
Dan begitu, teman-teman! Kita telah berpergian melalui negeri transaksi PL/SQL, dari memulai dan mengakhiri mereka, melakukan commit dan rollback, bahkan membuat savepoints. Ingat, transaksi adalah seperti sabuk keselamatan operasi basis data - mereka memastikan bahwa data Anda tetap konsisten dan dapat dipercaya.
Praktik konsep ini, mainkan dengan berbagai skenario, dan segera Anda akan menjadi ahli dalam mengelola transaksi. Selamat coding, dan may your transactions always be ACID (itu adalah lelucon basis data untuk hari lain)!
Credits: Image by storyset