Dokumen tersebut membahas pengelolaan transaksi dalam basis data. Transaksi digunakan untuk menjaga konsistensi data dan hanya membolehkan satu pengguna mengakses database untuk menulis data pada satu waktu. Terdapat beberapa pernyataan untuk mengelola transaksi seperti START TRANSACTION untuk memulai transaksi, COMMIT untuk menyimpan perubahan, dan ROLLBACK untuk membatalkan perubahan. SAVEPOINT digunakan untuk menyimpan titik dalam
1. Bahan Ajar Sistem Basis Data
BAB XI
MENGELOLA TRANSAKSI
Dalam penggunaan database, sering terjadi pengaksesan sebuah database oleh beberapa
user atau beberapa program pada saat yang bersamaan, oleh karena itu dibutuhkan pengaturan
untuk menjaga konsistensi pengaksesan data, sehingga tidak akan terjadi katidakko
nsistensian data. Transaksi dapat digunakan untuk menjaga konsistensi dan keakuratan data.
Transaksi digunakan untuk mengatur hak user pada saat mengakses database.
Transaksi memastikan bahwa suatu proses yang dijalankan terhadap database
dilaksanakan seluruhnya atau tidak sama sekali. Jika terjadi suatu kesalahan, maka proses harus
di roll back dan kondisi database kembali seperti sebelum dimulainya proses tersebut,
sebaliknya jika proses berhasil, maka seluruh data dimasukkan ke dalam database. Selain it u,
transaksi juga memastikan hanya boleh ada satu user yang sedang mengakses penulisan
terhadap database, jika satu user sedang melakukan proses penulisan, maka user lain dibatasi
dalam pengaksesan database, dengan begitu, maka data akan konsisten.
Hanya saja, tidak semua mesin mendukung proses pengelolaan transaksi. Dua mesin yang
sering digunakan adalah MyISAM dan InnoDB. MyISAM lebih sering digunakan, tapi mesin ini
tidak mendukung pengelolaan transaksi, sehingga untuk menggunakan pengelolaan transaksi,
kita perlu
menggunakan mesin InnoDB. Sebagai contoh:
CREATE TAB LE nov el
(
i dNovel s malli nt unsi gned a uto_i ncrement pri ma ry
key, j udul Novel va rchar(50) not null , Keteranga n mesin ya ng diguna
penga ra ngNovel va rcha r(50) ka n, di leta kka npa da
) akhir pendeskrips ia n ta bel
ya ng dibuat dan menggunakan
ENGINE=INNOD B;
mesin tersebut.
Berikut ini merupakan gambar skema pelaksanaan pengelolaan transaksi:
START TR ANS AC Da ta bas e pa da
TION saa t a wal pros es
INSERT INTO novel VALUES
(NULL,’ Twi li ght’,’S tepha ni e Ma yer’),
(NULL,’ New Moon t’, ’Stepha ni e
Pros es berha s il d il a ksa na ka n
2. Bahan Ajar Sistem Basis Data
Pros es
Ga ga ROLLBACK;
l
Da ta bas e s etel a
COMMIT; h a khir pros es
3. XI.1 Statement memulai Transaksi
Untuk memulai sebuah transaksi, syntax yang digunakan adalah START
TRANSACTION, syntax ini diletakkan pada awal proses yang akan dilaksanakan
menggunakan Transaksi.
XI.2 Statement COMMIT Transaksi
Statement COMMIT digunakan untuk mengakhiri suatu proses dan menyimpan
semua perubahan data yang terjadi dalam proses. Berikut ini merupakan contoh
penggunaan COMMIT:
START TR ANS AC TION; Statement memula i Tra nsa
INSERT INTO novel VALUES ks i
(NULL,'Twi li ght','Stepha ni e Ma yer'), Proses Pengisia n data
(NULL,'New Moon','S tepha ni e Ma ke dala m ta bel novel.
yer');
COMMIT; Statement mengcommit
semua pros es yang terja di
di dala m Tras aksi.
Ha sil nya a dal a h:
s el ect * from novel ;
+--------- +----- ------- +--------- -------- +
| i dNovel | j udul Novel | penga ra ngNovel |
+--------- +----- ------- +--------- -------- +
| 1 | Twi li ght | Stepha ni e Ma yer |
| 2 | New Moon | Stepha ni e Ma yer |
+--------- +----- ------- +--------- -------- +
XI.3 Statement ROLLBACK Transaksi
Seperti statement COMMIT, statement ROLLBACK juga digunakan untuk mengakhiri suatu
proses, hanya saja, jika kita menggunakan ROLLBACK, maka semua proses yang
dilakukan tidak akan disimpan, dan kondisi di kembalikan seperti pada awal proses.
Berikut ini adalah contoh penggunaan ROLLBACK:
4. START TR ANS AC TION; Statement memula i Tra nsa
INSERT INTO novel VALUES ks i
(NULL,'Ecl i ps e','Stepha ni e Ma yer'),
Proses Pengis ia n da ta ke dala
(NULL,'Brea ki ng Down','S tepha ni m tabel novel.
e
Ma yer'); Statement mengemba lika
ROLLBACK ; n semua proses ya ng terjadi
di dala m Tras aksi ke kondis i a
wal.
Isi tabel novel setela h pernyataan
Jika sebelum pernyataan ROLLBACK ROLLBACK:
kita menamplkna isi da ri tabel novel ada la s el ect * from novel ;
h s bb: +--------- +----- ------- +--------- -------- +
s el ect * from novel ; | i dNovel | j udul Novel | penga ra ngNovel
+--------- +----- ---------- +------ ----------- + |
| i dNovel | j udul Novel | p enga ra ngNovel +--------- +----- ------- +--------- -------- +
| | 1 | Twi li ght | Stepha ni e Ma yer |
+--------- +----- ---------- +------ ----------- + | 2 | New Moon | Stepha ni e Ma yer |
| 1 | Twi li ght | Stepha ni e Ma yer |
Isi ta bel novel kemba li pada
| 2 | New Moon | Stepha ni e Ma yer kondisi sebelum proses transa ksi.
|
| 3 | Ecli ps e | Stepha ni e Ma yer |
XI.4 Statement yang dapat mengakhiri Transaksi
Terdapat beberapa statement yang jika kita letakkan di dalam proses yang menggunakan
Transaksi dapat secara otomatis menghentikan Transaksi, kemudian pernyataan
tersebut dijalankan. Jika hal ini terjadi, maka semua proses dalam Transaksi akan di
COMMIT dan tidak akan bisa di ROLLBACK. Pernyataan-pernyataan tersebut antara lain:
Pernyataan Keterangan
ALTER TABLE Mengubah definisi tabel
CREATE INDEX Membuat indeks di dalam tabel
DROP DATABASE Menghapus database dari mysql server
DROP INDEX Menghapus indeks didalam tabel
DROP TABLE Menghapus tabel dari database
LOCK TABLES Menghalangi akses bersamaan pada tabel
RENAME TABLES Mengubah nama tabel
SET AUTOCOMMIT=1 Menyetel autocommit ke dalam mode on
START TRANSACTION Memulai Transaksi baru
TRUNCATE TABLE Menghapus data dari tabel
UNLOCK TABLES Menghilangkan LOCK TABLES
5.
6. XI.5 SAVEPOINT
Jika dalam sebuah proses yang panjang, kita memerlukan beberapa titik untuk
melakukan penyimpanan data. Titik itu dapat kita sebut SAVEPOINT. Beriku ini
merupakan skema peletakkan SAVEPOINT didalam Transaksi:
START Data bas e pa da a
TRANSACTION; wa l tra nsa ks i.
I NSERT I NTO novel VALUES
(NULL,’Laska r Pelangi ’,’An d rea Hi ra ta’);
Eks ekus i berha sil Eks ekus i Ga ROLLBACK;
gal
SAVEPOINT sp1; Data bas e SAVEPOINT
s p1
I NSERT I NTO novel VALUES
(NULL,’Sang Pe mimpi,’And rea Hi ra ta’);
ROLLBACK TO SAVEPOINT
Eks ekus i berha sil Eks ekus i Ga sp1; COMMIT;
gal
Data bas e pa da a
khir tra nsa ks i.
COMMIT;
XI.5.1 Pernyataan SAVEPOINT
Untuk menyatakan savepoint, pernyataannya adalah:
SAVEPOINT <nama savepoint>;
Dengan menggunakan pernyataan savepoint, maka semua proses yang terjadi
sebelum pernyataan ini akan di commit, kemudian melanjutkan ke proses
selanjutnya, tentunya pernyataan ini harus didalam Transaksi.
XI.5.2 Mengembalikan proses ke titik savepoint
Untuk mengembalikan kondisi database ke savepoint, maka digunakan
pernyataan:
ROLLBACK TO SAVEPOINT <nama savepoint>;
Dengan ini, maka semua proses setelah savepoint sampai pernyataan ini di remov e
dan kondisi database kembali seperti pada saat stelah savepoint.
Berikut ini contoh penggunaan SAVEPOINT dan ROLLBACK TO
4 Alif Finandhita, S.Kom
8. START TRANSACTION; Memula i Tra nsa
ksi
INSERT INTO novel VALUES
(NULL,'Eclipse','Stephanie Ma yer'),
(NULL,'Breaking Down','Stephanie Ma Mengisi da ta keda lam Da ta base seba nya k 2
yer'); da ta
SAVEPOINT sa ve1;
SAVEPOINT dengan nama sa
select * from novel; ve1
+---- ---- -+- ---- ---- --- ---+---- ---- --- ---- --+
| idNovel | judulNovel | pengarangNovel |
+---- ---- -+- ---- ---- --- ---+---- ---- --- ---- --+
| 1 | Twilight | Stepha ni e Ma yer |
| 2 | New Moon | Stepha nie Ma yer |
Isi databas e setelah
| 3 | Eclips e | Stepha nie Ma yer |
SAVEPOINT, terda pa t 4 data .
| 4 | Brea king Down | Stephanie Mayer |
+---- ---- -+- ---- ---- --- ---+---- ---- --- ---- --+
INSERT INTO novel VALUES
(NULL,'Edensor','Andrea Hira ta '),
(NULL,'Ma ria mah Ka rpov','Andrea Hira Mengisi da ta keda lam Da ta base seba nya k 2
ta '); da ta
select * from novel;
+---- ---- -+- ---- ---- --- ---- -+-- ---- --- ---- ---- +
| idNovel | judulNovel | pengara ngNovel
|
+---- ---- -+- ---- ---- --- ---- -+-- ---- --- ---- ---- +
| 1 | Twilight | Stepha nie Ma yer | Isi da ta base setelah pengisia n, jumla h
| 2 | New Moon | Stepha nie Ma yer | data menja di 6 da ta
| 3 | Eclips e | Stephanie Ma yer |
| 4 | Brea king Down | Stepha nie Ma yer
|
| 5 | Edensor | Andrea Hira ta | Mengembalika n da ta base ke kondis i pa da
| 6 | Ma ria ma h Ka rpov | Andrea Hira ta s aat SAVEPOINT, ha sil data base a kan sa ma
|
+---- ---- -+- ---- ---- --- ---- -+-- ---- --- s eperti pada saa t setela h pernyata an
---- ---- + ROLLBACK TO SAVEPOINT s SAVEPOINT, yaitu
ave1;
INSERT INTO novel VALUES
(NULL,'Las ka r Pelangi','Andrea Hira Mengisi da ta keda lam Da ta base seba nya k 2
ta '), (NULL,'Sang Pemimpi','Andrea da ta
Hira ta ');
Seluruh proses Transa ksi di -commit.
COMMIT; Terja di proses penamba han 2 da ta .
select * from novel;
+---- ---- -+- ---- ---- --- ---- +--- ---- --- ---- ---+
| idNovel | judulNovel | penga ra ngNovel
|
+---- ---- -+- ---- ---- --- ---- +--- ---- --- ---- ---+ Data bas e pada a khir Tra nsa ksi. Terda pa t 6
| 1 | Twilight | Stephanie Ma yer | data .
| 2 | New Moon | Stephanie Mayer |
| 3 | Eclips e | Stepha nie Ma yer |
| 4 | Brea king Down | Stepha nie Ma
yer |
| 7 | La s kar Pela ngi | Andrea Hirata |
| 8 | Sa ng Pemimpi | Andrea Hirata |
+---- ---- -+- ---- ---- --- ---- +--- ---- --- ---- ---+
9. XI.6 Mengatur mode AUTOCOMMIT
Pada dasarnya, tanpa adanya pernyataan COMMIT, setiap proses yang terjadi langsung di
tulis ke dalam tabel. Untuk itu, kita perlu mengatur autocommit untuk tidak
melakukan penulisan secara otomatis, sehingga proses yang terjadi tidak akan langsung
ditulis ke tabel hingga ada pernyataan COMMI T. Untuk mengatur autocommit, pernyataan
yang digunakan adalah:
Pernyataan Keterangan
SET AUTOCOMMIT=0 Untuk mematikan autocommit(OFF)
SET AUTOCOMMIT=1 Untuk menyalakan autocommit(ON)
@@AUTOCOMMIT; Untuk melihat mode autocommit yang sedang digunakan
Berikut ini contoh pengaturan autocommit:
10. SET AUTOCOMMIT=0; AUTOCOMMIT diatur dala m mode 0 ata u OFF
SELECT @@AUTOCOMMIT;
+---- ---- --- ---+
| @@AUTOCOMMIT | Select untuk meliha t mode a utocommit ya
+---- ---- --- ---+ ng seda ng diguna kan.
| 0|
+---- ---- --- ---+
INSERT INTO novel VALUES (NULL,'Edensor','Andrea Hira ta
'); Memas ukkan da ta ba ru ke da lam ta bel novel.
select * from novel;
+---- ---- -+- ---- ---- --- ---- +--- ---- --- ---- ---+
| idNovel | judulNovel | penga ra ngNovel |
+---- ---- -+- ---- ---- --- ---- +--- ---- --- ---- ---+
| 1 | Twilight | Stephanie Ma yer | Data dala m da ta base setela h di
| 2 | New Moon | Stephanie Mayer | tamba h. Jumla h a da menja di 7 da ta
| 3 | Eclips e | Stepha nie Ma yer |
| 4 | Brea king Down | Stepha nie Ma yer |
| 7 | La s kar Pela ngi | Andrea Hirata |
| 8 | Sa ng Pemimpi | Andrea Hirata |
| 9 | Edensor | Andrea Hirata |
+---- ---- -+- ---- ---- --- ---- +--- ---- --- ---- ---+
exit; Kelua r da ri mys ql cons ole
use contoh2;
Data bas e cha
nged select * from
novel;
+---- ---- -+- ---- ---- --- ---- +--- ---- --- ---- ---+ Stela h kelua r dari mysql
| idNovel | judulNovel | penga ra ngNovel console, kemudia n buka kembali mys
| ql console, guna ka n da taba se, dan
+---- ---- -+- ---- ---- --- ---- +--- ---- --- ---- ---+ liha t isi da ta pada tabel novel.
| 1 | Twilight | Stephanie Ma yer |
| 2 | New Moon | Stephanie Mayer | Data pada tabel novel kembali menja di
| 3 | Eclips e | Stepha nie Ma yer | 6 data , has il eks ekus i dari proses
| 4 | Brea king Down | Stepha nie Ma sebelumnya tidak disimpan keda
yer | lam data bas e.
| 7 | La s kar Pela ngi | Andrea Hirata |
| 8 | Sa ng Pemimpi | Andrea Hirata | Mode uta ma da ri autocommit a dala
+---- ---- -+- ---- ---- --- ---- +--- ---- --- ---- ---+ h 1 a tau ON, ja di ketika mys ql
console ba ru dijala nkan, maka mode
select @@a ut ocommi t ; kembali menjadi
+---- ---- --- ---+ 1/ON
| @@autocommi t |
+---- ---- --- ---+
| 1|
+---- ---- --- ---+
11.
12. XI.7 Mengatur Pemisahan Level Transaksi
Selain dapat mengatur autocommit, mysql juga mengizinkan pengaturan pemisahan level
Transaksi dengan menggunakan perintah sebagai berikut:
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
{READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
Minima l ya ng harus dia tur adala h keyword SET TRANSACTION ISOLATION LEVEL da n salah sa tu
da ri 4 level pemisa han (yang terda pa t dala m kurung kura wal)
Jika keywords ya ng dipilih a da lah GLOBAL, ma ka pernya taan transaksi a ka n diaplikas ikan pa da
semua koneks i ba ru terha dap data base, teta pi tida k berla ku pa da koneksi yang seda ng diguna ka
n.
Jika keywords SESSION ya ng dipilih, ma ka pernyata an tra nsa ks i dila ksa na kan pada s emua tra
nsa ks i ba ru ya ng terjadi pa da koneks i da ta base ya ng sedang diguna ka n, teta pi tida k berlaku
untuk koneks i da ta base lain.
Jika keyword tida k dia tur, ma ka pernyataa n transa ksi ha nya berla ku pa da transa ks i
berikutnya .
4 Level Pemisahan Transaksi:
Level Pemisahan Transaksi Keterangan
REA D UNCO MMITED Mengi zi nka n di rty rea ds , nonrepea ta bl e rea ds da n pha
ntom rea d. Lev el i ni l ebi h bai k ha nya di guna ka n pa da
da ta bas e denga n da ta ya ng umum.
REA D COMMITED Ha nya mengi zi nka n nonrepea ta bl e rea d da n pha ntom
rea d, teta pi ti da k untuk dirty rea d.
REP EATA BLE REA D Ha nya mengi zi nka n pha ntom rea d,, merupa ka n l evel
pemi s a ha n tra ns a ksi uta ma pa da mesi n InnoDB.
SERIALIZABLE Ti da k mengi zi nka n a da nya dirty rea d, nonrepea ta bl e rea d
da n pha ntom rea d. Ji ka l evel i ni di guna ka n, ma ka da ta bas
e di kunci da ri tra nsa ksi lai n da n berj ala n s eca ra beruruta n.
Ha nya l evel i ni
ya ng ters edi a untuk ta bel BDB.
Penjelasan:
Dirty Reads
Merupakan masalah yang terjadi ketika terdapat beberapa transaksi yang
mencoba untuk mengakses satu tabel pada waktu yang sama ataupun hampir
bersamaan.
Nonrepeatable Reads
Merupakan masalah yang terjadi ketika ada sebuah transaksi yang sedang
8 Alif Finandhita, S.Kom
13. mengakses pembacaan terhadap suatu database, kemudian ketika proses
tersebut masih berlangsung, ada proses lain yang mengupdate isi database. Hal ini
menyebabkan ada data yang tidak terbaca oleh transaksi yang sedang membaca.
9 Alif Finandhita, S.Kom
14. Phantom Reads
Merupakan masalah yang terjadi ketika transaksi pertama membaca
database, kemudian transaksi kedua memprbaharui database, kemudian
transaksi pertama membaca kembali database, maka transaksi pertama akan
mendapatkan hasil yang berbeda.
Contoh Penggunaan SET TRANSACTION:
SET S ESSION TRANS ACTION ISOLATION LEVEL R EAD COMMITTED;
SET TRANSACTION dia Level ya ng diguna kan ada lah
tur hanya untuk sess ion READ COMMITTED, ya itu mengizinkan
yang seda ng berla ngs ung. a danya nonrepeatable reads da n
phantom reads .
s el ect @@gl obal .tx_i s ola ti Merupa ka n s ynta x ya
on; ng diguna ka n untuk
+---------- ------------ -+ mengeta hui penga tura
| @@gl obal .tx_is ol a ti on | n level is olasi yang umum
diguna ka n, yaitu
+---------- ------------ -+ REPEATABLE-READ
| REPEATABLE-READ |
+---------- ------------ -+
s el ect @@tx_i s ola ti Merupa ka n s ynta x ya
on; ng diguna ka n untuk
+---------- ------ + mengeta hui penga tura
| @@tx_i s ol a ti on | n level isolasi ya ng
sedang diguna ka n, yaitu
+---------- ------ + READ -COMMITTED
| READ-COM MITTED |
+---------- ------ +
XI.8 Penguncian Tabel yang tidak menggunakan Transaksi
Transaksi hanya dapat digunakan pada tabel yang menggunakan mesin INNODB dan BDB
tabel. Untuk melakukan penguncian atau pengaturan agar tidak terjadi dirty
reads, nonrepeatable reads dan phantom reads ada syntax yang dapat digunakan, yaitu:
LOCK {TA BLE | TABL ES }
<table n ame> [A S <al ias >] {REA D [LOCAL] | [LOW _PRIORITY] WRITE}
[{, <tab le name> [AS <alias>] {REA D [LOCAL] | [LOW_P RIO RITY] W RITE}}...]
10 Alif Finandhita, S.Kom
15. Contohnya:
LOCK T ABLE novel READ; Mengunci sebua h ta bel yaitu tabel novel,
Penguncian di a tur a ga r tabel novel ha nya da pa
t di baca ta npa bis a di upda te oleh tra nsa ks i
lain.
LOCK TAB LES nov el READ, p emi nj a ma n WRITE;
Mengunci beberapa ta bel, yaitu tabel novel
dan peminjaman.
Ta bel novel di kunci untuk teta p da pat
dibaca oleh transa ksi la in,
Ta bel peminja ma n tida k da pat di akses sama
seka li oleh Tra nsa ks i lain.
XI.9 Pelepasan Kunci terhadap Tabel
Jika tebel telah di kunci, maka setelah proses selesai kunci harus dilepaskan agar
transaksi lain bisa mengakses tabel. Syntax yang digunakan adalah:
UNLOCK [TAB LE/TAB LES] Jika penguncia n yang dila kuka n terha dap
sa tu table, ma ka pelepasa n kunci
mengguna kan UNLOCK TABLE
Seda ngkan jika ya ng dikunci a da lah ba nyak ta
bel, maka pelepasa n penguncian mengguna kan
synta x
UNLOCK TABLES
10 Alif Finandhita, S.Kom