Anda di halaman 1dari 20

Locking Table in Mysql

PRAKTIKUM SISTEM BASIS DATA


Pengertian
• Tabel Locking adalah pendanda yang terkait dengan tabel.
• MySQL memungkinkan sesi klien untuk secara eksplisit memperoleh
kunci tabel untuk mencegah sesi lain mengakses tabel yang sama
selama periode tertentu.
• Sesi klien dapat memperoleh atau melepaskan kunci tabel hanya
untuk dirinya sendiri. Dan sesi klien tidak dapat memperoleh atau
melepaskan kunci tabel untuk sesi klien lainnya.
Ilustrasi
Kegunaan Lock Table
• Sebuah Database pada suatu kasus bisa saja yang menggunakan tidak
hanya satu aplikasi (misalkan aplikasi yang pertama berbentuk web
based, dan aplikasi yang lain berbentuk desktop aplikasi).
• Dan kedua aplikasi tersebut mengakses tabel yang sama secara
bersaman, maka akan mungkin terjadi kesalahan data (misalkan
kesalahan tentang stok barang, pada kasus ini aplikasi pertama
sedang melakukan proses penambahan stok pada tabel_stok tiba-tiba
aplikasi kedua melakukan penghitungan stok pada tabel_stok ketika
proses penambahan stok belum selesai) .
Kegunaan Lock Table
• Kejadian ini dapat dihindari dengan menerapkan LOCK TABLES.
• LOCK TABLES melakukan penguncian tabel [LOCK TABLES] ketika
proses sedang berlangsung, kemudian akan membebaskan table
[UNLOCK TABLES] ketika proses telah berakhir.
Praktik
• Sebelum kita melanjutkan, mari buat database Bernama praktikum7;
• Kemudian tabel bernama message untuk berlatih dengan pernyataan
penguncian tabel.
CREATE TABLE messages (
id INT NOT NULL AUTO_INCREMENT,
message VARCHAR(100) NOT NULL,
PRIMARY KEY (id)
);
MySQL LOCK TABLES statement
• Berikut sintaks lock tables
LOCK TABLES table_name [READ | WRITE]

• Dalam sintaks ini, Anda menentukan nama tabel yang ingin Anda kunci setelah
kata kunci LOCK TABLES. Selain itu, Anda menentukan jenis kunci, BACA atau
TULIS.
• MySQL memungkinkan Anda untuk mengunci beberapa tabel dengan
menentukan daftar nama tabel yang dipisahkan koma dengan tipe kunci yang
ingin Anda kunci setelah kata kunci LOCK TABLES:

LOCK TABLES table_name1 [READ | WRITE],


table_name2 [READ | WRITE],
... ;
READ LOCK
• Read Lock, adalah penguncian tabel yang menjadikan tabel tersebut hanya dapat
dilakukan manipulai proses read saja yang di terapkan pada semua session
termasuk session nya sendiri.
• Jadi bila ada manipulasi tabel seperti insert, update, delete, truncate status nya
akan selalu waiting hingga dilakukan UNLOCK TABLES.
LOCK TABLES nama_tabel READ;

UNLOCK TABLES;
READ LOCK
• Pada sesi pertama, pertama, sambungkan ke database dan gunakan fungsi
CONNECTION_ID() untuk mendapatkan id koneksi saat ini sebagai berikut:
SELECT CONNECTION_ID();

• Kemudian, masukkan baris baru ke dalam tabel message.


INSERT INTO messages(message)
VALUES('Hello');
READ LOCK
• Setelah itu, lakukan penguncian menggunakan pernyataan LOCK TABLE.:
LOCK TABLE messages READ;

• Terakhir, coba masukkan baris baru ke tabel message:


INSERT INTO messages(message)
VALUES('Hi');

• Jadi setelah kunci READ diperoleh, Anda tidak dapat menulis data ke tabel dalam
sesi yang sama. Mohon shell/cmd pada sesi ini jangan diclose
• Mari kita periksa READ LOCK dari sesi yang berbeda.
READ LOCK
• Pertama, buka lagi xamppnya dan buka lagi shell/command linenya

• Sehingga kita punya 2 shell yang aktif (diartikan ada 2 sesi yang aktif)
READ LOCK
• Lakukan login mysql –u root pada sesi yang terakhir
• connect ke database dan cek connection id:

• Sekarang kita punya 2 sesi dengan 2 id koneksi yang beda yaitu 10 dan 11
• Tampilkan tabel messages
READ LOCK
• Kemudian, masukkan baris baru ke dalam tabel pesan:
INSERT INTO messages(message)
VALUES('Bye');

• Maka setelah ditekan enter akan ada kursor berkedip, tidak ada informasi query
ok. Ini artinya status querynya masih waiting, karena pada sesi 10, keadaan
tabelnya masih di lock
READ LOCK
• Kemudian, masukkan baris baru ke dalam tabel pesan:
INSERT INTO messages(message)
VALUES('Bye');

• Maka setelah ditekan enter akan ada kursor berkedip, tidak ada informasi query
ok. Ini artinya status querynya masih waiting, karena pada sesi 10, keadaan
tabelnya masih di lock
READ UNLOCK
• Terakhir, berikan perintah unlock table pada sesi pertama ( connection id 10)

• Cek pada sesi kedua (connection id 11) sekarang status waitingnya sudah
berakhir, dan status querynya menjadi query OK
WRITE LOCK
• Write Lock, adalah penguncian tabel yang menjadikan tabel tersebut hanya dapat
dilakukan manipulai proses read,insert, update, delete, truncate pada session nya
sendiri.
• Dan yang terjadi pada session lain session lain proses read juga akan tertunda,
dan untuk proses yang lain seperti insert, update, delete, truncate status nya
akan selalu waiting hingga dilakukan UNLOCK TABLES.

LOCK TABLES nama_tabel WRITE;

UNLOCK TABLES;
WRITE LOCK
• Kita coba pada table messages, lakukan perintah query pada sesi pertama
(connection id 10)
LOCK TABLE messages WRITE;

• Kemudian, masukkan baris baru ke dalam tabel messages.


INSERT INTO messages(message)
VALUES('Good Moring');

SELECT * FROM messages;


WRITE LOCK
• Setelah itu kita coba pada sesi kedua (connection id 11)
INSERT INTO messages(message)
VALUES('Bye Bye');

SELECT * FROM messages;

• Statusnya akan waiting (tidak memproses query, kursor berkedip-kedip)


• Artinya tidak bisa melakukan perintah write selama masih berada dalam status
lock di sesi pertama (connection id 10)
• Maka kita harus lakukan unlock tables agar dapat memproses di sesi kedua
(connection id 11)
PERBEDAAN WRITE DAN READ LOCKS
• READ LOCKS adalah kunci "bersama" yang mencegah write locks diperoleh tetapi
bukan read locks lainnya.
• WRITE LOCKS adalah kunci "eksklusif" yang mencegah penguncian lain dalam
bentuk apa pun.
Latihan Locked Tabel
• Berikan contoh bagaimana penguncian tabel bekerja pada proses lain
selain insert (update, delete).

Anda mungkin juga menyukai