Rumah  >  Artikel  >  pangkalan data  >  Penguncian jadual analisis sintaks MySQL

Penguncian jadual analisis sintaks MySQL

WBOY
WBOYke hadapan
2022-06-14 12:06:361861semak imbas

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.

Penguncian jadual analisis sintaks MySQL

Pembelajaran yang disyorkan: tutorial video mysql

Penguncian jadual 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;

KUNCI dan BUKA KUNCI JADUAL sintaks

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

BACA kunci mempunyai ciri-ciri berikut:

  1. BACA Kunci di atas meja boleh diperoleh secara serentak melalui berbilang sesi. Selain itu, sesi lain boleh membaca data daripada jadual tanpa mendapatkan kunci.
  2. Sesi yang memegang kunci BACA hanya boleh membaca data dalam jadual, tetapi tidak boleh menulis. Selain itu, sesi lain tidak boleh menulis data pada jadual sehingga READ mengeluarkan kunci. Operasi tulis dari sesi lain akan memasuki keadaan menunggu sehingga kunci BACA dilepaskan.
  3. MySQL secara tersirat akan melepaskan semua kunci jika sesi ditamatkan secara normal atau tidak normal. Ciri ini juga berkaitan dengan kunci TULIS.

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();

Penguncian jadual analisis sintaks MySQL
Kemudian, masukkan baris baru dalam jadual tbl.

INSERT INTO tbl(col) VALUES(10);

Seterusnya, tanya data dalam jadual tbl.

SELECT * FROM tbl;

Penguncian jadual analisis sintaks MySQL
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);

Penguncian jadual analisis sintaks MySQL
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();

Penguncian jadual analisis sintaks MySQL
Kemudian, dapatkan semula data daripada jadual tbl:

SELECT * FROM tbl;

Penguncian jadual analisis sintaks MySQL
Seterusnya, masukkan baris baharu dalam jadual tbl:

INSERT INTO tbl(col) VALUES(20);

Penguncian jadual analisis sintaks MySQL
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;

Penguncian jadual analisis sintaks MySQL
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;
Sesi lain tidak boleh membaca data daripada dan menulis data ke jadual sehingga kunci WRITE dilepaskan.

Penguncian jadual analisis sintaks MySQL

Pertama, WRITE memperoleh kunci dari sesi pertama.

Kemudian, memasukkan baris baharu dalam jadual tbl

  1. adalah berguna.
  2. Seterusnya, baca data daripada jadual tbl.

LOCK TABLE tbl WRITE;

Ia juga berfungsi.

INSERT INTO tbl(col) VALUES(11);
Selepas itu, bermula dari sesi kedua, cuba tulis dan baca data:

SELECT * FROM tbl;

Penguncian jadual analisis sintaks MySQL

最后,从第一个会话中释放锁定。

UNLOCK TABLES;

看到第二个会话中的所有待处理操作都已执行,下图说明了结果:
Penguncian jadual analisis sintaks MySQL

读锁与写锁

  1. 读锁是“共享”锁,它可以防止正在获取写锁,但不能锁定其他读锁。
  2. 写锁是“独占”锁,可以防止任何其他类型的锁。

推荐学习:mysql视频教程

Atas ialah kandungan terperinci Penguncian jadual analisis sintaks MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:csdn.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam