Rabu, 05 Oktober 2011

Locking Record MYSQL

I. Melock record Untuk menghindari tabrakan (crash) update/delete Oleh dua User atau lebih
pada waktu yg bersamaan :

Pada kasus berikut, misalkan user A akan melakukan update terhadap tabel "tmp.my_locking" dengan "filter tbl_id = 1".
Sementara pada waktu yg bersamaan, user B juga akan melakukan update atau delete terhadap data yg sama.
Agar tidak terjadi "crash"

User A:
-------

begin;
select * from tmp.my_locking where tbl_id =1 for update;
update tmp.my_locking set kode="update user oleh A" where tbl_id =1;
...
...
commit;


User B:
-------
update tmp.my_locking set kode="update user oleh B" where tbl_id =1;


Maka yg terjadi adalah, user B akan ter "LOCK" selama user A belum menjalankan "Commit".
Setelah user A commit, baru selanjutnya perintah query user B di eksekusi.




II. Melock record Untuk menghindari update/delete Oleh User lain
pada saat salah satu user sedang mengakses record :


Pada kasus berikut, misalkan user A melihat data tabel "tmp.my_locking", misalkan berupa repot .
Sementara pada waktu yg bersamaan, user B juga akan melakukan update atau delete terhadap salah satu data atau lebih
yg merupakan data yg sedang di lihat oleh user A.


User A:
-------

begin;
select * from tmp.my_locking lock in share mode;

...
...
commit;


User B:
-------
delete from tmp.my_locking where tbl_id =14;



Maka yg terjadi adalah, user B akan ter "LOCK" selama user A belum menjalankan "Commit".
Setelah user A commit, baru selanjutnya perintah query user B di eksekusi.