Penerapan Locking pada DBMS berbasis Web Oleh : Didik Tristianto, M.Kom
Jenis Locking Menurut sifatnya locking pada DBMS dapat dibagi menjadi dua yaitu : Exclusive lock : jika suatu table sedang berada dalam kondisi ini maka hanya proses yang melakukan penguncian yang dapat mengakses table tersebut. Shared lock : jika suatu table sedang berada dalam kondisi ini maka table tersebut dapat melaksanakan perintah SELECT dari proses lain tetapi datanya tidak dapat dirubah dengan menggunakan perintah UPDATE, INSERT, ataupun DELETE baik dari proses yang menguncinya apalagi dari proses lainnya.
Syarat Locking Jika user ingin mengupdate (baca+tulis) tabel, ia harus melakukan write lock pada tabel tsb. Jika user hanya ingin membaca tabel, ia harus melakukan read lock pada tabel tsb. User harus melepas semua lock ketika semua transaksi telah selesai
Perintah Locking pd MySQL LOCK TABLES namatable1 jenisoperasi1 [,namatable2 jenisoperasi2, …] .... [transaksi] UNLOCK TABLES; jenisoperasi menentukan sifat locking pada table. WRITE berarti bahwa locking akan bersifat exclusive READ berarti locking bersifat shared.
Contoh mysql> LOCK TABLES real_table READ, insert_table WRITE; mysql> INSERT INTO real_table SELECT * FROM insert_table; mysql> UNLOCK TABLES;
Locking tabel pd aplikasi web Dilakukan locking pada tabel dalam transaksi Transaksi boleh dilakukan Commit untuk Update tabel Unlock tabel Setelah unlock, user lain dapat melakukan update pada tabel yang sama
Contoh if (!mysql_query($query, $connection)). . $query =“LOCK TABLES items READ, orders WRITE, customer READ”; if (!mysql_query($query, $connection)). $query ="SELECT SUM(price*qty) FROM items, orders, customer WHERE customer.cust_id = orders.cust_id AND orders.order_id = items.order_id AND orders.cust_id = items.cust_id AND orders.order_id = $orderId AND customer.cust_id = $custId"; If (!($result = mysql_query($query, $connection))) showerror(); $row = mysql_fetch_array($result); If ($row["SUM(price*qty)"] > $minimum) $query = "UPDATE orders SET discount = $discount WHERE cust_id = $custId AND order_id = $orderId"; $query = "UNLOCK TABLES";
Locking pada PHP PHP tidak memiliki fungsi khusus untuk menangani locking tabel Locking dilakukan melalui perintah SQL yang dikirim ke server MySQL melalui perintah mysql_query Perintah LOCK TABLES dan UNLOCK TABLES harus berada dalam satu skrip Perintah UNLOCK TABLES diperlukan apabila transaksi masih akan dilanjutkan (dibawah perintah UNLOCK TABLES masih banyak ada transaksi) PHP akan melakukan UNLOCK secara otomatis pada saat skrip selesai dijalankan walaupun tidak secara eksplisit diberikan perintah UNLOCK TABLES
Selamat dan Sukses