PL/SQL - Transaksi: Panduan untuk Pemula

Halo 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 pemrograman; saya akan menjadi panduan ramah Anda, menjelaskan segala sesuatu langkah demi langkah. mari kita masuk ke dalam!

PL/SQL - Transactions

Apa Itu Transaksi?

Sebelum kita mulai, mari kita mengerti apa itu transaksi. Bayangkan Anda memindahkan uang dari rekening tabungan Anda ke rekening cek Anda. Operasi ini melibatkan dua langkah:

  1. Mengurangi uang dari tabungan
  2. Menambah uang ke cek

Dua langkah ini bersama-sama membentuk sebuah transaksi. Ini sangat penting agar kedua langkah itu terjadi, atau keduanya tidak terjadi. Kita tidak ingin uang menghilang atau muncul dari udara!

Memulai dan Mengakhiri Transaksi

Dalam PL/SQL, transaksi mulai secara otomatis saat Anda menjalankan pernyataan pertama DML (Data Manipulation Language). Ini termasuk 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 dijalankan, transaksi dimulai. Transaksi ini terus berlanjut dengan pernyataan UPDATE.

Melakukan Commit Terhadap Transaksi

Sekarang Anda mungkin berpikir, "Baiklah, kita sudah memulai transaksi, tapi bagaimana caranya mengakhirinya?" Pernyataan yang bagus! Kita menggunakan pernyataan COMMIT untuk mengakhiri transaksi dan membuat semua perubahan tetap. 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 memberitahu basis data, "Ya, saya yakin tentang perubahan ini. Harap membuatnya tetap."

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 itu belum tetap di basis data.

Mengerahkan Transaksi

kadang-kadang, hal-hal tidak berjalan seperti yang diharapkan. 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! Kami tidak bermaksud menggandakan gaji semua orang!

ROLLBACK;  -- Waw! Krisis terelakkan.
END;
/

Dalam contoh ini, kita secara tidak sengaja menggandakan gaji semua orang (berapa baiknya kalau itu terjadi?). Tetapi karena ROLLBACK, kita dapat mengurungkan perubahan ini sebelum menjadi tetap.

Kontrol Transaksi Otomatis

PL/SQL juga menyediakan kontrol transaksi otomatis dalam situasi tertentu. mari kita lihat tabel dari scenario ini:

Scenario Tindakan
Akhir normal blok PL/SQL COMMIT otomatis
Kesalahan saat menjalankan transaksi ROLLBACK otomatis
Perintah SQL*Plus EXIT (tanpa COMMIT) ROLLBACK otomatis
Kecelakaan 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 saat menjalankan.

Savepoints: Membuat Checkpoint dalam Transaksi Anda

kadang-kadang, Anda mungkin ingin membatalkan bagian dari transaksi, tapi bukan semua. Itu saat savepoint berguna. Mereka seperti checkpoint dalam permainan video - Anda dapat kembali ke mereka jika ada masalah.

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 penyisipan.

Praktik Terbaik untuk Menggunakan Transaksi

  1. Simpan transaksi pendek: Transaksi yang berjalan lama dapat mengunci sumber daya dan mempengaruhi kinerja sistem.
  2. Gunakan pernyataan COMMIT eksplisit: Meskipun PL/SQL dapat secara otomatis commit dalam beberapa kasus, lebih baik Anda eksplisit tentang kapan Anda ingin commit perubahan Anda.
  3. Atur penanganan kesalahan dengan baik: Pastikan Anda termasuk penanganan kesalahan yang proper untuk menghindari commit atau rollback yang tidak diinginkan.
  4. Gunakan savepoint untuk transaksi kompleks: Jika Anda memiliki transaksi panjang, pertimbangkan menggunakan savepoint untuk mengizinkan rollback sebagian.

Kesimpulan

Dan itu adalah dia, teman-teman! Kita telah menjelajahi negeri transaksi PL/SQL, dari memulai dan mengakhiri mereka, hingga melakukan commit dan rollback, dan bahkan membuat savepoint. Ingat, transaksi adalah seperti sabuk keselamatan operasi basis data - mereka memastikan bahwa data Anda tetap konsisten dan dapat dipercaya.

Latih konsep ini, mainkan dengan berbagai scenario, 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