Modul 9 : Modul Transaction & View - informatika-itts/modul-perancangan-basis-data GitHub Wiki

Transaction

Transaction adalah fitur sistem manajemen basis data (DBMS) yang membantu pemulihan data pada kesalahan internal. Transaction pada basis data adalah kumpulan kueri yang harus dieksekusi sehingga jika salah satu eksekusi kueri gagal, eksekusi kueri Anda akan kembali ke awal. Transaction adalah mekanisme yang memungkinkan untuk menginterpretasikan beberapa perubahan pada database dengan satu operasi.

Di MySQL, transaction dimulai dengan pernyataan BEGIN WORK dan diakhiri dengan pernyataan COMMIT atau ROLLBACK. Perintah SQL antara pernyataan awal dan akhir membentuk sebagian besar transaction.

Ketika transaction berhasil diselesaikan, perintah COMMIT harus dilakukan sehingga perubahan pada semua tabel yang terlibat akan berlaku.

Jika kegagalan terjadi, perintah ROLLBACK harus dilakukan untuk mengembalikan setiap tabel yang direferensikan dalam transaction ke keadaan sebelumnya.

Sintaks :

  • Memulai transaksi START TRANSACTION;

  • Jika ada perintah SQL lain yang ingin ditambahkan, letakkan di sini

  • Jika semua perintah dijalankan tanpa masalah, lakukan commit COMMIT;

  • Jika terjadi masalah, lakukan rollback untuk membatalkan perubahan ROLLBACK;

Contoh penggunaan :

  • Memulai transaksi START TRANSACTION;

  • Jalankan perintah SQL di dalam transaksi

INSERT INTO nama_tabel (kolom1, kolom2) VALUES ('nilai1', 'nilai2');
UPDATE nama_tabel SET kolom1 = 'nilai_baru' WHERE kondisi;
DELETE FROM nama_tabel WHERE kondisi;
  • Jika semua perintah dijalankan tanpa masalah, lakukan commit COMMIT;

  • Jika terjadi masalah, lakukan rollback untuk membatalkan perubahan ROLLBACK;

Lalu, seandainya kita ingin menghapus data pada suatu tabel. Ada query seperti berikut:

mysql> START TRANSACTION;

mysql> DELETE FROM orders;

Apa yang terjadi? Apakah datanya terhapus? Apa alasannya? Jika ada yang salah apa kira-kira solusinya? Silahkan dijawab ya :)

Data Definition Language tidak dapat di Rollback

Di MySQL, beberapa pernyataan tidak dapat dibatalkan. Pernyataan DDL seperti CREATE DATABASE atau DROP DATABASE, CREATE TABLE, ALTER atau DROP TABLE. Anda harus merancang transaksi tanpa pernyataan ini.

SAVEPOINT, ROLLBACK TO SAVEPOINT, dan RELEASE SAVEPOINT

InnoDB mendukung pernyataan SQL SAVEPOINT, ROLLBACK TO SAVEPOINT, RELEASE SAVEPOINT dan kata kunci WORK opsional untuk ROLLBACK.

SAVEPOINT adalah sebuah titik dalam transaksi yang memungkinkan kita untuk mengembalikan status transaksi ke keadaan pada saat savepoint tersebut dibuat. SAVEPOINT hanya dapat dibuat di dalam blok transaksi.

ROLLBACK TO SAVEPOINT adalah perintah yang digunakan untuk mengembalikan status transaksi ke keadaan pada saat savepoint tersebut dibuat.

RELEASE SAVEPOINT adalah perintah yang digunakan untuk menghapus sebuah savepoint.

Sintaks :

SAVEPOINT identifier  
ROLLBACK [WORK] TO [SAVEPOINT] identifier  
RELEASE SAVEPOINT identifier

Contoh penerapan SAVEPOINT dan ROLLBACK TO SAVEPOINT :

  • Buat tabel pegawai
CREATE TABLE pegawai (
    id INT NOT NULL PRIMARY KEY,
    nama VARCHAR(255) NOT NULL
);
  • Masukkan data ke tabel pegawai
INSERT INTO pegawai (id, nama) VALUES (1, 'Andi'), (2, 'Budi'), (3, 'Cici');
  • Buat savepoint SAVEPOINT awal;

  • Ubah data pegawai

UPDATE pegawai SET nama = 'Aldi' WHERE id = 1;
UPDATE pegawai SET nama = 'Budi Budi' WHERE id = 2;
  • Rollback ke savepoint ROLLBACK TO awal;

  • Cek data pegawai SELECT * FROM pegawai;

Contoh penerapan RELEASE SAVEPOINT :

  • Buat tabel pegawai
CREATE TABLE pegawai (
    id INT NOT NULL PRIMARY KEY,
    nama VARCHAR(255) NOT NULL
);
  • Masukkan data ke tabel pegawai
INSERT INTO pegawai (id, nama) VALUES (1, 'Andi'), (2, 'Budi'), (3, 'Cici');
  • Buat savepoint
SAVEPOINT awal;
  • Ubah data pegawai
UPDATE pegawai SET nama = 'Aldi' WHERE id = 1;
UPDATE pegawai SET nama = 'Budi Budi' WHERE id = 2;
  • Rollback ke savepoint ROLLBACK TO awal;

  • Hapus savepoint RELEASE SAVEPOINT awal;

  • Cek apakah savepoint masih ada

SELECT * FROM pg_catalog.pg_savepoints;

LOCK dan UNLOCK

Lock adalah mekanisme yang mencegah pengguna lain untuk mengubah data yang sedang diubah oleh pengguna saat ini. Hal ini penting untuk memastikan integritas dan konsistensi data.

Ada dua jenis lock utama dalam MySQL:

Read lock: Kunci ini memungkinkan pengguna lain untuk membaca data, tetapi mencegah mereka untuk mengubahnya. Write lock: Kunci ini mencegah semua pengguna lain untuk mengakses data, termasuk membacanya.

Unlock adalah proses melepaskan kunci. Saat pengguna selesai mengubah data, mereka harus membuka kunci tabel yang mereka ubah. Hal ini akan memungkinkan pengguna lain untuk mengakses data lagi.

Ada dua cara utama untuk mengunci dan membuka kunci tabel di MySQL:

Menggunakan pernyataan LOCK TABLES dan UNLOCK TABLES: Pernyataan ini memungkinkan Anda untuk mengunci dan membuka kunci tabel secara eksplisit. Menggunakan transaksi: Transaksi secara otomatis mengunci tabel yang sedang dimodifikasi. Saat transaksi dicommit, kunci dilepaskan.

Contoh penerapan Lock dan Unlock

SET autocommit=0;
LOCK TABLES t1 WRITE, t2 READ;
UPDATE t1 SET name='John Doe' WHERE id=1;
SELECT * FROM t2;
COMMIT;
UNLOCK TABLES;

View

Di dalam MySQL, View dapat didefinisikan sebagai ‘tabel virtual’. Tabel ini bisa berasal dari tabel lain, atau gabungan dari beberapa tabel.

Tujuan dari pembuatan VIEW adalah untuk kenyamanan (mempermudah penulisan query), untuk keamanan (menyembunyikan beberapa kolom yang bersifat rahasia), atau dalam beberapa kasus bisa digunakan untuk mempercepat proses menampilkan data (terutama jika kita akan menjalankan query tersebut secara berulang).

Untuk membuat View di dalam MySQL, kita tinggal menggunakan format dasar sebagai berikut:

CREATE OR REPLACE VIEW view_name AS SELECT column1, column2, ...
FROM table_name;

Bisa juga menggunakan pengkondisian :

CREATE OR REPLACE VIEW view_name AS SELECT column1, column2, ...
FROM table_name
WHERE condition;

Untuk mengakses data yang terdapat di VIEW, cukup menggunakan query SELECT:

SELECT * FROM nama_view;

Contoh :

image Sekarang, pada setiap pemanggilan VIEW, MySQL Server tidak perlu memfilter hasil pencarian, namun cukup memanggil tabel virtual tadi. Hal ini akan mempercepat proses penampilan data.

VIEW juga berfungsi sama seperti layaknya tabel biasa, sebagai contoh, kita bisa melakukan query berikut: image INGAT! Ketika sebuah tabel utama di update, maka VIEW juga akan otomatis ter-update.

TUGAS

Instruksi : Gunakan database modul minggu lalu

  1. Masukkan produk baru menggunakan Transaction berdasarkan data gambar berikut ini (SERTAKAN SINTAKSNYA) :

image

output:

image

  1. Buatlah view dari tabel produk yang berisi kolom id_produk, judul_produk, dan harga_produk! SERTAKAN SINTAKSNYA

output:

image

  1. Tampilkan rata-rata jumlah_pembelian dari view tabel pembelian pada bulan November saja! SERTAKAN SINTAKSNYA (Hint : Buat view nya dulu, baru kerjakan soalnya)

output:

image