SQL - Transaksi

Transaksi adalah unit kerja yang dilakukan terhadap database. Transaksi adalah unit atau urutan pekerjaan yang diselesaikan dalam urutan logis, baik secara manual oleh pengguna atau secara otomatis oleh semacam program database.

Transaksi adalah penyebaran satu atau lebih perubahan ke database. Misalnya, jika Anda membuat catatan atau memperbarui catatan atau menghapus catatan dari tabel, maka Anda sedang melakukan transaksi di tabel itu. Penting untuk mengontrol transaksi ini untuk memastikan integritas data dan untuk menangani kesalahan database.

Praktisnya, Anda akan menggabungkan banyak kueri SQL ke dalam grup dan Anda akan mengeksekusi semuanya bersama sebagai bagian dari transaksi.

Sifat Transaksi

Transaksi memiliki empat sifat standar berikut, biasanya disebut dengan akronim ACID.

  • Atomicity- memastikan bahwa semua operasi dalam unit kerja diselesaikan dengan sukses. Jika tidak, transaksi dibatalkan pada titik kegagalan dan semua operasi sebelumnya digulung kembali ke keadaan semula.

  • Consistency - memastikan bahwa database dengan benar mengubah status pada transaksi yang dilakukan dengan sukses.

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

  • Durability - memastikan bahwa hasil atau efek dari transaksi yang dilakukan tetap ada jika terjadi kegagalan sistem.

Kontrol Transaksi

Perintah berikut digunakan untuk mengontrol transaksi.

  • COMMIT - untuk menyimpan perubahan.

  • ROLLBACK - untuk mengembalikan perubahan.

  • SAVEPOINT - membuat poin dalam grup transaksi untuk ROLLBACK.

  • SET TRANSACTION - Menempatkan nama pada transaksi.

Perintah Kontrol Transaksional

Perintah kontrol transaksional hanya digunakan dengan DML Commandsseperti - INSERT, UPDATE dan DELETE saja. Mereka tidak dapat digunakan saat membuat tabel atau menjatuhkannya karena operasi ini secara otomatis dilakukan dalam database.

Perintah COMMIT

Perintah COMMIT adalah perintah transaksional yang digunakan untuk menyimpan perubahan yang dilakukan oleh transaksi ke database.

Perintah COMMIT adalah perintah transaksional yang digunakan untuk menyimpan perubahan yang dilakukan oleh transaksi ke database. Perintah COMMIT menyimpan semua transaksi ke database sejak perintah COMMIT atau ROLLBACK terakhir.

Sintaks untuk perintah COMMIT adalah sebagai berikut.

COMMIT;

Example

Pertimbangkan tabel CUSTOMERS yang memiliki catatan berikut -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Berikut ini adalah contoh yang akan menghapus record tersebut dari tabel yang memiliki age = 25 dan kemudian COMMIT perubahan dalam database.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> COMMIT;

Jadi, dua baris dari tabel akan dihapus dan pernyataan SELECT akan menghasilkan hasil sebagai berikut.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Perintah ROLLBACK

Perintah ROLLBACK adalah perintah transaksional yang digunakan untuk membatalkan transaksi yang belum disimpan ke database. Perintah ini hanya dapat digunakan untuk membatalkan transaksi sejak perintah COMMIT atau ROLLBACK terakhir dikeluarkan.

Sintaks untuk perintah ROLLBACK adalah sebagai berikut -

ROLLBACK;

Example

Pertimbangkan tabel CUSTOMERS yang memiliki catatan berikut -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Berikut ini adalah contoh, yang akan menghapus record tersebut dari tabel yang memiliki age = 25 dan kemudian ROLLBACK perubahan dalam database.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> ROLLBACK;

Dengan demikian, operasi penghapusan tidak akan mempengaruhi tabel dan pernyataan SELECT akan menghasilkan hasil sebagai berikut.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Perintah SAVEPOINT

SAVEPOINT adalah titik dalam transaksi ketika Anda dapat mengembalikan transaksi ke titik tertentu tanpa memutar balik seluruh transaksi.

Sintaks untuk perintah SAVEPOINT seperti yang ditunjukkan di bawah ini.

SAVEPOINT SAVEPOINT_NAME;

Perintah ini hanya berfungsi dalam pembuatan SAVEPOINT di antara semua pernyataan transaksional. Perintah ROLLBACK digunakan untuk membatalkan sekelompok transaksi.

Sintaks untuk memutar kembali ke SAVEPOINT seperti yang ditunjukkan di bawah ini.

ROLLBACK TO SAVEPOINT_NAME;

Berikut adalah contoh di mana Anda berencana untuk menghapus tiga catatan berbeda dari tabel PELANGGAN. Anda ingin membuat SAVEPOINT sebelum setiap penghapusan, sehingga Anda dapat ROLLBACK ke SAVEPOINT mana pun kapan saja untuk mengembalikan data yang sesuai ke keadaan aslinya.

Example

Pertimbangkan tabel PELANGGAN yang memiliki catatan berikut.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Blok kode berikut berisi rangkaian operasi.

SQL> SAVEPOINT SP1;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=3;
1 row deleted.

Sekarang setelah tiga penghapusan dilakukan, mari kita asumsikan bahwa Anda telah berubah pikiran dan memutuskan untuk ROLLBACK ke SAVEPOINT yang Anda identifikasi sebagai SP2. Karena SP2 dibuat setelah penghapusan pertama, dua penghapusan terakhir dibatalkan -

SQL> ROLLBACK TO SP2;
Rollback complete.

Perhatikan bahwa hanya penghapusan pertama yang terjadi sejak Anda mengembalikan ke SP2.

SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+
6 rows selected.

Perintah RELEASE SAVEPOINT

Perintah RELEASE SAVEPOINT digunakan untuk menghapus SAVEPOINT yang telah Anda buat.

Sintaks untuk perintah RELEASE SAVEPOINT adalah sebagai berikut.

RELEASE SAVEPOINT SAVEPOINT_NAME;

Setelah SAVEPOINT dirilis, Anda tidak dapat lagi menggunakan perintah ROLLBACK untuk membatalkan transaksi yang dilakukan sejak SAVEPOINT terakhir.

Perintah SET TRANSACTION

Perintah SET TRANSACTION dapat digunakan untuk memulai transaksi database. Perintah ini digunakan untuk menentukan karakteristik transaksi yang mengikuti. Misalnya, Anda dapat menentukan transaksi menjadi hanya baca atau baca tulis.

Sintaks untuk perintah SET TRANSACTION adalah sebagai berikut.

SET TRANSACTION [ READ WRITE | READ ONLY ];