PostgreSQL - 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 record, mengupdate record, atau menghapus record dari tabel, maka Anda sedang melakukan transaksi di atas tabel. Penting untuk mengontrol transaksi untuk memastikan integritas data dan untuk menangani kesalahan database.

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

Sifat Transaksi

Transaksi memiliki empat sifat standar berikut, biasanya disebut dengan singkatan ACID -

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

  • Consistency - Memastikan bahwa database dengan benar mengubah status setelah transaksi berhasil dilakukan.

  • 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 -

  • BEGIN TRANSACTION - Untuk memulai transaksi.

  • COMMIT - Untuk menyimpan perubahan, Anda dapat menggunakan alternatif END TRANSACTION perintah.

  • ROLLBACK - Untuk mengembalikan perubahan.

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

Perintah BEGIN TRANSACTION

Transaksi dapat dimulai menggunakan BEGIN TRANSACTION atau cukup BEGIN perintah. Transaksi seperti itu biasanya bertahan sampai perintah COMMIT atau ROLLBACK berikutnya ditemukan. Tetapi transaksi juga akan ROLLBACK jika database ditutup atau jika terjadi kesalahan.

Berikut ini adalah sintaks sederhana untuk memulai transaksi -

BEGIN;

or

BEGIN TRANSACTION;

Perintah COMMIT

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

Perintah COMMIT menyimpan semua transaksi ke database sejak COMMIT atau perintah ROLLBACK terakhir.

Sintaks untuk perintah COMMIT adalah sebagai berikut -

COMMIT;

or

END TRANSACTION;

Perintah ROLLBACK

Perintah ROLLBACK adalah perintah transaksional yang digunakan untuk membatalkan transaksi yang belum disimpan ke database.

Perintah ROLLBACK hanya dapat digunakan untuk membatalkan transaksi sejak perintah COMMIT atau ROLLBACK terakhir dikeluarkan.

Sintaks untuk perintah ROLLBACK adalah sebagai berikut -

ROLLBACK;

Contoh

Pertimbangkan tabel PERUSAHAAN memiliki catatan berikut -

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

Sekarang, mari kita mulai transaksi dan menghapus record dari tabel yang memiliki age = 25 dan terakhir kita menggunakan perintah ROLLBACK untuk membatalkan semua perubahan.

testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;

Jika Anda akan memeriksa tabel PERUSAHAAN masih memiliki catatan berikut -

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

Sekarang, mari kita mulai transaksi lain dan menghapus record dari tabel yang memiliki age = 25 dan terakhir kita menggunakan perintah COMMIT untuk melakukan semua perubahan.

testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;

Jika Anda akan memeriksa tabel PERUSAHAAN, itu masih memiliki catatan berikut -

id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  3 | Teddy |  23 | Norway     |  20000
  5 | David |  27 | Texas      |  85000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
(5 rows)