Transaction Control Language (TCL) adalah kumpulan perintah dalam SQL yang digunakan untuk mengontrol transaksi dalam database. Perintah-perintah dalam TCL, seperti COMMIT dan ROLLBACK, memungkinkan pengguna untuk memastikan bahwa transaksi yang dilakukan di dalam database akan dilaksanakan dengan benar dan konsisten. Dengan menggunakan TCL, pengguna dapat memastikan bahwa data yang disimpan dalam database selalu benar dan dapat diandalkan.

Dalam penggunaan sehari-hari, TCL biasanya digunakan dalam aplikasi yang memerlukan transaksi dalam database, seperti sistem perbankan dan aplikasi e-commerce. Sebagai contoh, ketika seorang pelanggan melakukan pembayaran di sebuah situs web e-commerce, transaksi yang terjadi melibatkan beberapa perubahan dalam database, seperti penambahan entri pada tabel transaksi dan pengurangan stok barang yang dibeli. Dalam konteks ini, TCL memastikan bahwa transaksi tersebut dilakukan dengan benar dan konsisten sehingga data yang disimpan dalam database selalu akurat dan dapat diandalkan.

Perintah dalam Transaction Control Language (TCL)

TCL terdiri dari empat perintah utama, yaitu COMMIT, ROLLBACK, SAVEPOINT, dan SET TRANSACTION.

1. COMMIT

Perintah COMMIT digunakan untuk mengakhiri transaksi dan menyimpan semua perubahan yang telah dilakukan ke database secara permanen. Dalam konteks penggunaannya, COMMIT digunakan setelah semua perintah DML (Data Manipulation Language) dalam transaksi selesai dijalankan dan menghasilkan hasil yang diinginkan. Setelah COMMIT dijalankan, transaksi dianggap selesai dan semua perubahan yang telah dilakukan pada data dalam transaksi tersebut di-commit atau diterapkan ke dalam database.

Berikut adalah contoh penggunaan perintah COMMIT:

BEGIN TRANSACTION;

INSERT INTO pelanggan (nama, email, telp)
VALUES ('Raphtalia', 'neng.geulis@gmail.com', '081234567890');

UPDATE pesanan
SET status = 'Dikirim'
WHERE pelanggan_id = 1;

COMMIT;

Dalam contoh di atas, transaksi dimulai dengan perintah BEGIN TRANSACTION, kemudian diikuti oleh dua perintah DML, yaitu INSERT dan UPDATE. Setelah kedua perintah DML berhasil dijalankan dan menghasilkan hasil yang diinginkan, perintah COMMIT digunakan untuk mengakhiri transaksi dan menyimpan semua perubahan ke dalam database secara permanen. Dengan melakukan COMMIT pada akhir transaksi, data dalam tabel pelanggan dan pesanan akan diperbarui dan semua perubahan yang telah dilakukan dalam transaksi akan menjadi bagian dari database yang permanen dan dapat diakses oleh transaksi lainnya.


2. ROLLBACK

Perintah ROLLBACK digunakan untuk membatalkan semua perubahan yang telah dilakukan pada data dalam transaksi. Dalam konteks penggunaannya, ROLLBACK digunakan ketika terjadi kesalahan atau situasi tidak diinginkan dalam sebuah transaksi dan pengguna ingin membatalkan semua perubahan yang telah dilakukan pada data. Perintah ROLLBACK akan mengembalikan database ke kondisi sebelum transaksi dimulai dan membatalkan semua perubahan yang telah dilakukan dalam transaksi tersebut.

Berikut adalah contoh penggunaan perintah ROLLBACK :

BEGIN TRANSACTION;

INSERT INTO pelanggan (nama, email, telp)
VALUES ('Raphtalia', 'neng.geulis@gmail.com', '081234567890');

UPDATE pesanan
SET status = 'Dikirim'
WHERE pelanggan_id = 1;

-- terdapat kesalahan pada perintah DELETE berikut
DELETE FROM produk
WHERE stok < 0;

-- membatalkan semua perubahan dalam transaksi
ROLLBACK;

Dalam contoh di atas, transaksi dimulai dengan perintah BEGIN TRANSACTION, kemudian diikuti oleh tiga perintah DML, yaitu INSERT, UPDATE, dan DELETE. Namun, pada perintah DELETE, terdapat kesalahan karena kondisi WHERE tidak valid, yang dapat menyebabkan kehilangan data pada tabel produk. Oleh karena itu, perintah ROLLBACK digunakan untuk membatalkan semua perubahan yang telah dilakukan dalam transaksi dan mengembalikan database ke kondisi sebelum transaksi dimulai. Dengan melakukan ROLLBACK pada akhir transaksi, data dalam tabel pelanggan dan pesanan tidak akan diperbarui dan perubahan pada tabel produk tidak akan dilakukan, sehingga database tetap dalam kondisi yang benar dan konsisten.


3. SAVEPOINT

Perintah SAVEPOINT digunakan dalam bahasa SQL sebagai bagian dari Transaction Control Language (TCL) untuk membuat titik penyimpanan (savepoint) di dalam transaksi. Tujuan dari perintah SAVEPOINT adalah untuk membuat checkpoint pada suatu titik dalam transaksi, sehingga jika terjadi kesalahan atau kondisi tidak diinginkan di kemudian hari, pengguna dapat memulihkan database dari titik tersebut tanpa harus membatalkan seluruh transaksi. Dalam hal ini, SAVEPOINT memungkinkan pengguna untuk melakukan rollback pada sebagian transaksi, tanpa harus membatalkan seluruh transaksi.

Berikut adalah contoh penggunaan perintah SAVEPOINT :

BEGIN TRANSACTION;

INSERT INTO pelanggan (nama, email, telp)
VALUES ('Raphtalia', 'neng.geulis@gmail.com', '081234567890');

SAVEPOINT save_point_1;

UPDATE pesanan
SET status = 'Dikirim'
WHERE pelanggan_id = 1;

-- terdapat kesalahan pada perintah DELETE berikut
DELETE FROM produk
WHERE stok < 0;

SAVEPOINT save_point_2;

INSERT INTO pesanan (pelanggan_id, jumlah, total_harga, status)
VALUES (1, 2, 50000, 'Dalam Pengiriman');

-- jika terjadi kesalahan pada perintah INSERT berikut, maka transaksi dapat dikembalikan ke savepoint save_point_2
INSERT INTO pesanan_produk (pesanan_id, produk_id, jumlah)
VALUES (5, 2, 1);

COMMIT;

Dalam contoh di atas, transaksi dimulai dengan perintah BEGIN TRANSACTION, kemudian diikuti oleh empat perintah DML, yaitu INSERT, UPDATE, DELETE, dan INSERT. Di antara perintah UPDATE dan DELETE, terdapat perintah SAVEPOINT save_point_1 yang membuat titik penyimpanan pada transaksi. Kemudian, pada perintah DELETE, terdapat kesalahan yang dapat menyebabkan kehilangan data pada tabel produk. Oleh karena itu, perintah SAVEPOINT save_point_2 digunakan untuk membuat titik penyimpanan tambahan sebelum melakukan perintah INSERT pada tabel pesanan_produk.

Jika terjadi kesalahan pada perintah INSERT pada tabel pesanan_produk, maka transaksi dapat dikembalikan ke savepoint save_point_2 dengan menggunakan perintah ROLLBACK TO SAVEPOINT save_point_2. Dalam hal ini, semua perubahan pada tabel pesanan dan pelanggan akan tetap disimpan, sementara perubahan pada tabel produk dan pesanan_produk akan dibatalkan. Akhirnya, jika tidak terjadi kesalahan pada transaksi, maka perintah COMMIT digunakan untuk mengakhiri transaksi dan menyimpan seluruh perubahan pada database.


4. SET TRANSACTION

Perintah SET TRANSACTION digunakan dalam Transaction Control Language (TCL) untuk mengatur sifat transaksi seperti penguncian dan izolasi level, serta menentukan karakteristik transaksi lainnya.

Berikut ini adalah contoh penggunaan perintah SET TRANSACTION :

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

Perintah di atas mengatur level isolasi transaksi menjadi “read committed”. Isolasi level menentukan seberapa besar transaksi dapat melihat perubahan yang dibuat oleh transaksi lain dalam waktu yang sama. Dalam level isolasi “read committed”, transaksi dapat melihat perubahan yang dibuat oleh transaksi lain yang sudah di-commit, namun tidak dapat melihat perubahan yang belum di-commit.

Selain itu, perintah SET TRANSACTION juga dapat digunakan untuk mengatur penguncian atau locking. Misalnya:

SET TRANSACTION READ WRITE;

Perintah di atas mengatur transaksi sebagai transaksi yang dapat melakukan operasi write atau write lock. Ini berarti transaksi tersebut dapat mengunci data yang diaksesnya sehingga transaksi lain tidak dapat mengakses atau mengubah data tersebut selama transaksi tersebut belum selesai.

Perintah SET TRANSACTION juga dapat digunakan untuk mengatur karakteristik transaksi lainnya seperti penggunaan savepoint atau penentuan nama transaksi. Misalnya:

SET TRANSACTION NAME 'update_inventory';

Perintah di atas menentukan nama transaksi sebagai “update_inventory”. Nama transaksi dapat digunakan untuk melacak transaksi dan mengembalikan transaksi ke titik tertentu menggunakan perintah ROLLBACK TO SAVEPOINT.