HSQLDB - Transaksi

SEBUAH Transactionadalah sekelompok operasi manipulasi database yang berurutan, yang dilakukan dan dianggap sebagai satu unit kerja tunggal. Dengan kata lain, ketika semua operasi berhasil dijalankan, baru seluruh transaksi akan selesai. Jika ada operasi dalam transaksi yang gagal, maka seluruh transaksi akan gagal.

Sifat Transaksi

Pada dasarnya, transaksi mendukung 4 properti standar. Mereka dapat disebut sebagai properti ACID.

Atomicity - Semua operasi dalam transaksi berhasil dijalankan, jika tidak, transaksi dibatalkan pada titik kegagalan dan operasi sebelumnya digulung kembali ke posisi sebelumnya.

Consistency - Basis data mengubah status dengan benar setelah transaksi yang dilakukan berhasil.

Isolation - Ini memungkinkan transaksi untuk beroperasi secara independen dan transparan satu sama lain.

Durability - Hasil atau efek dari transaksi yang dilakukan tetap ada jika terjadi kegagalan sistem.

Commit, Rollback, dan Savepoint

Kata kunci ini terutama digunakan untuk transaksi HSQLDB.

Commit- Selalu transaksi yang berhasil harus diselesaikan dengan menjalankan perintah COMMIT.

Rollback - Jika terjadi kegagalan dalam transaksi, maka perintah ROLLBACK harus dijalankan untuk mengembalikan setiap tabel yang direferensikan dalam transaksi ke keadaan sebelumnya.

Savepoint - Membuat titik dalam grup transaksi untuk rollback.

Contoh

Contoh berikut menjelaskan konsep transaksi bersama dengan commit, rollback, dan Savepoint. Mari kita perhatikan tabel Pelanggan dengan kolom id, nama, umur, alamat, dan gaji.

Indo Nama Usia Alamat Gaji
1 Ramesh 32 Ahmedabad 2000.00
2 Karun 25 Delhi 1500,00
3 Kaushik 23 Kota 2000.00
4 Chaitanya 25 Mumbai 6500,00
5 Harish 27 Bhopal 8500,00
6 Kamesh 22 MP 1500,00
7 Murali 24 Indore 10.000,00

Gunakan perintah berikut untuk membuat tabel pelanggan di sepanjang baris data di atas.

CREATE TABLE Customer (id INT NOT NULL, name VARCHAR(100) NOT NULL, age INT NOT
NULL, address VARCHAR(20), Salary INT, PRIMARY KEY (id));
Insert into Customer values (1, "Ramesh", 32, "Ahmedabad", 2000);
Insert into Customer values (2, "Karun", 25, "Delhi", 1500);
Insert into Customer values (3, "Kaushik", 23, "Kota", 2000);
Insert into Customer values (4, "Chaitanya", 25, "Mumbai", 6500);
Insert into Customer values (5, "Harish", 27, "Bhopal", 8500);
Insert into Customer values (6, "Kamesh", 22, "MP", 1500);
Insert into Customer values (7, "Murali", 24, "Indore", 10000);

Contoh untuk COMMIT

Kueri berikut menghapus baris dari tabel yang memiliki age = 25 dan menggunakan perintah COMMIT untuk menerapkan perubahan tersebut dalam database.

DELETE FROM CUSTOMERS WHERE AGE = 25;
COMMIT;

Setelah menjalankan query di atas, Anda akan menerima keluaran berikut.

2 rows effected

Setelah berhasil mengeksekusi perintah di atas, periksa catatan tabel pelanggan dengan menjalankan perintah yang diberikan di bawah ini.

Select * from Customer;

Setelah menjalankan query di atas, Anda akan menerima keluaran berikut.

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |   ADDRESS |  SALARY  |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  |  32 | Ahmedabad |   2000   |
| 3  |  kaushik |  23 |   Kota    |   2000   |
| 5  |  Harish  |  27 |   Bhopal  |   8500   |
| 6  |  Kamesh  |  22 |    MP     |   4500   |
| 7  |  Murali  |  24 |   Indore  |   10000  |
+----+----------+-----+-----------+----------+

Contoh untuk Rollback

Mari kita pertimbangkan tabel Pelanggan yang sama sebagai input.

Indo Nama Usia Alamat Gaji
1 Ramesh 32 Ahmedabad 2000.00
2 Karun 25 Delhi 1500,00
3 Kaushik 23 Kota 2000.00
4 Chaitanya 25 Mumbai 6500,00
5 Harish 27 Bhopal 8500,00
6 Kamesh 22 MP 1500,00
7 Murali 24 Indore 10.000,00

Berikut adalah contoh kueri yang menjelaskan tentang fungsionalitas Rollback dengan menghapus record dari tabel yang memiliki age = 25 dan kemudian ROLLBACK perubahan dalam database.

DELETE FROM CUSTOMERS WHERE AGE = 25;
ROLLBACK;

Setelah berhasil mengeksekusi dua kueri di atas, Anda dapat melihat data rekaman di tabel Pelanggan menggunakan perintah berikut.

Select * from Customer;

Setelah menjalankan perintah di atas, Anda akan menerima output berikut.

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |   ADDRESS |  SALARY  |
+----+----------+-----+-----------+----------+
|  1 |  Ramesh  |  32 | Ahmedabad |   2000   |
|  2 |  Karun   |  25 |   Delhi   |   1500   |
|  3 |  Kaushik |  23 |   Kota    |   2000   |
|  4 | Chaitanya|  25 |   Mumbai  |   6500   |
|  5 |  Harish  |  27 |   Bhopal  |   8500   |
|  6 |  Kamesh  |  22 |     MP    |   4500   |
|  7 |  Murali  |  24 |    Indore |   10000  |
+----+----------+-----+-----------+----------+

Kueri hapus menghapus data catatan pelanggan yang usianya = 25. Perintah Rollback, memutar kembali perubahan tersebut pada tabel Pelanggan.

Contoh untuk Savepoint

Savepoint adalah titik dalam transaksi ketika Anda dapat mengembalikan transaksi ke titik tertentu tanpa memutar kembali seluruh transaksi.

Mari kita pertimbangkan tabel Pelanggan yang sama sebagai input.

Indo Nama Usia Alamat Gaji
1 Ramesh 32 Ahmedabad 2000.00
2 Karun 25 Delhi 1500,00
3 Kaushik 23 Kota 2000.00
4 Chaitanya 25 Mumbai 6500,00
5 Harish 27 Bhopal 8500,00
6 Kamesh 22 MP 1500,00
7 Murali 24 Indore 10.000,00

Mari kita pertimbangkan dalam contoh ini, Anda berencana untuk menghapus tiga catatan berbeda dari tabel Pelanggan. Anda ingin membuat Savepoint sebelum setiap penghapusan, sehingga Anda dapat mengembalikan ke Savepoint mana pun kapan saja untuk mengembalikan data yang sesuai ke keadaan semula.

Berikut rangkaian operasinya.

SAVEPOINT SP1;
DELETE FROM CUSTOMERS WHERE ID = 1;
SAVEPOINT SP2;
DELETE FROM CUSTOMERS WHERE ID = 2;
SAVEPOINT SP3;
DELETE FROM CUSTOMERS WHERE ID = 3;

Sekarang, Anda telah membuat tiga Savepoint dan menghapus tiga catatan. Dalam situasi ini, jika Anda ingin memutar kembali rekaman yang memiliki Id 2 dan 3 kemudian gunakan perintah Rollback berikut.

ROLLBACK TO SP2;

Perhatikan bahwa hanya penghapusan pertama yang terjadi sejak Anda mengembalikan ke SP2. Gunakan kueri berikut untuk menampilkan semua catatan pelanggan.

Select * from Customer;

Setelah menjalankan query di atas, Anda akan menerima keluaran berikut.

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |   ADDRESS |  SALARY  |
+----+----------+-----+-----------+----------+
|  2 |   Karun  |  25 |  Delhi    |   1500   |
|  3 |  Kaushik |  23 |  Kota     |   2000   |
|  4 | Chaitanya|  25 |  Mumbai   |   6500   |
|  5 |  Harish  |  27 |  Bhopal   |   8500   |
|  6 |  Kamesh  |  22 |  MP       |   4500   |
|  7 |  Murali  |  24 |  Indore   |  10000   |
+----+----------+-----+-----------+----------+

Lepaskan Savepoint

Kita dapat melepaskan Savepoint menggunakan perintah RELEASE. Berikut ini adalah sintaks generik.

RELEASE SAVEPOINT SAVEPOINT_NAME;