Artikel ini membawakan anda pengetahuan yang berkaitan tentang mysql, yang terutamanya memperkenalkan analisis sintaks yang berkaitan tentang penguncian jadual MySQL membolehkan sesi pelanggan memperoleh kunci jadual secara eksplisit untuk menghalang sesi lain Untuk mengakses jadual yang sama dalam sesuatu yang khusus tempoh masa, mari kita lihat, saya harap ia akan membantu semua orang.
Pembelajaran yang disyorkan: tutorial video mysql
Kunci ialah simbol yang dikaitkan dengan meja. MySQL membenarkan sesi pelanggan memperoleh kunci jadual secara eksplisit untuk menghalang sesi lain daripada mengakses jadual yang sama untuk tempoh masa tertentu. Sesi pelanggan hanya boleh memperoleh atau melepaskan kunci meja untuk dirinya sendiri. Ia tidak boleh memperoleh atau melepaskan kunci meja untuk sesi lain.
CREATE TABLE tbl ( id INT NOT NULL AUTO_INCREMENT, col INT NOT NULL, PRIMARY KEY (id)) Engine = InnoDB;
Pernyataan berikut secara eksplisit memperoleh kunci jadual:
LOCK TABLES table_name [READ | WRITE]
Untuk mengunci jadual, nyatakan ia selepas nama kata kunci LOCK TABLES . Selain itu, anda boleh menentukan jenis kunci, yang boleh BACA atau TULIS.
Untuk melepaskan kunci di atas meja, gunakan pernyataan berikut:
UNLOCK TABLES;
BACA kunci mempunyai ciri-ciri berikut:
Contoh:
Dalam sesi pertama, mula-mula, sambung ke pangkalan data mysqldemo dan dapatkan ID sambungan semasa menggunakan fungsi CONNECTION_ID() seperti yang ditunjukkan di bawah:
SELECT CONNECTION_ID();
Kemudian, masukkan baris baru dalam jadual tbl.
INSERT INTO tbl(col) VALUES(10);
Seterusnya, tanya data dalam jadual tbl.
SELECT * FROM tbl;
Selepas itu, untuk mendapatkan kunci, gunakan pernyataan LOCK TABLE.
LOCK TABLE tbl READ;
Akhir sekali, dalam sesi yang sama, jika anda cuba memasukkan baris baru dalam jadual tbl, anda akan mendapat mesej ralat.
INSERT INTO tbl(col) VALUES(11);
Jadi sebaik sahaja READ memperoleh kunci, ia tidak boleh menulis data ke jadual dalam sesi yang sama.
Periksa kunci dari sesi lain.
Mula-mula, sambung ke mysqldemo dan semak ID sambungan:
SELECT CONNECTION_ID();
Kemudian, dapatkan semula data daripada jadual tbl:
SELECT * FROM tbl;
Seterusnya, masukkan baris baharu dalam jadual tbl:
INSERT INTO tbl(col) VALUES(20);
Sisipan dari sesi kedua belum selesai kerana sesi pertama BACA sudah berada dalam kunci tbl A telah diperoleh di atas meja tetapi belum dikeluarkan.
Butiran boleh dilihat dari SHOW PROCESSLIST.
SHOW PROCESSLIST;
Selepas itu, kembali ke sesi pertama dan gunakan pernyataan UNLOCK TABLES untuk melepaskan kunci. Selepas READ melepaskan kunci dari sesi pertama, INSERT melakukan operasi dalam sesi kedua.
unlock tables;
Akhir sekali, semak data dalam jadual tbl untuk melihat sama ada operasi INSERT sesi kedua benar-benar dilaksanakan. TULIS kunci baca dan tulis data.
SELECT * FROM tbl;
Kemudian, memasukkan baris baharu dalam jadual tbl
LOCK TABLE tbl WRITE;
Ia juga berfungsi.
INSERT INTO tbl(col) VALUES(11);
SELECT * FROM tbl;
最后,从第一个会话中释放锁定。
UNLOCK TABLES;
看到第二个会话中的所有待处理操作都已执行,下图说明了结果:
推荐学习:mysql视频教程
Atas ialah kandungan terperinci Penguncian jadual analisis sintaks MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!