Rumah  >  Artikel  >  pangkalan data  >  Adakah kemas kini dalam mysql mengunci jadual?

Adakah kemas kini dalam mysql mengunci jadual?

WBOY
WBOYasal
2022-05-26 14:42:368535semak imbas

Terdapat dua situasi di mana kemas kini dalam mysql akan mengunci jadual: 1. Apabila kemas kini tidak mempunyai indeks, transaksi sebelum penyata diserahkan melalui komit, dan arahan akan berjalan seperti biasa dan tamat, kemudian kemas kini akan mengunci jadual; 2. Kemas kini menambah Apabila pengindeksan, arahan tidak akan tersekat dan jadual tidak akan dikunci, tetapi baris yang sama akan dikemas kini dan baris akan dikunci.

Adakah kemas kini dalam mysql mengunci jadual?

Persekitaran pengendalian tutorial ini: sistem Windows 10, versi mysql8.0.22, komputer Dell G3.

Adakah kemas kini dalam mysql mengunci jadual?

Jika tiada indeks, kemas kini akan mengunci jadual Jika indeks ditambah, baris akan dikunci

Bila transaksi sebelumnya lulus commit Setelah diserahkan, arahan akan berjalan seperti biasa dan tamat, menunjukkan bahawa jadual dikunci.

Dua situasi:

  • 1 Dengan indeks

  • 2 Tanpa indeks

Pengenalan premis:

Kaedah: Gunakan baris arahan untuk mensimulasikan

1.mysq Memandangkan penyerahan transaksi automatik dihidupkan secara lalai, anda mesti menyemak dahulu sama ada pangkalan data semasa anda dihidupkan Lakukan transaksi secara automatik.

Arahan: pilih @@autocommit;

Hasilnya adalah seperti berikut:

Adakah kemas kini dalam mysql mengunci jadual?

Jika 1, kemudian jalankan arahan: set autocommit = 0; Tetapkan untuk melumpuhkan penyerahan automatik

2 Format jadual pangkalan data semasa adalah seperti berikut

tb_user | CREATE TABLE `tb_user` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `name` varchar(32) DEFAULT NULL,
 `phone` varchar(11) DEFAULT NULL,
 `operator` varchar(32) DEFAULT NULL,
 `gmt_create` datetime DEFAULT NULL,
 `gmt_modified` datetime DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

Jelas sekali, kecuali untuk kunci utama, saya tidak menambah sebarang indeks <.>

Contoh sebenar:

1. Tiada indeks

Jalankan arahan: mulakan urus niaga, dan kemudian jalankan arahan: kemas kini tb_user set phone=11 di mana nama="c1" ubah suai, jangan lakukan transaksi dahulu .

Buka tetingkap lain dan jalankan arahan terus: kemas kini tb_user set phone=22 di mana name="c2" anda akan mendapati bahawa arahan itu tersekat, tetapi apabila transaksi sebelumnya diserahkan melalui commit, arahan itu akan berjalan seperti biasa Ia berakhir, menunjukkan bahawa meja dikunci.

2. Tambahkan indeks pada medan nama

create index index_name on tb_user(name);
Kemudian teruskan operasi dalam 1, iaitu transaksi terbuka dan jalankan kemas kini tb_user set phone=11 di mana name="c1"; jangan serahkan dahulu

dan kemudian jalankan kemas kini tb_user set phone=22 di mana name="c2" dan mendapati arahan itu tidak akan tersekat, menunjukkan bahawa tiada jadual kunci

tetapi Jika yang satu lagi juga mengemas kini baris yang sama seperti kemas kini tb_user set phone=22 di mana name="c1";, ini bermakna baris itu dikunci

3 🎜>

Jika tiada indeks, kemas kini akan mengunci jadual Jika indeks ditambah, baris akan dikunci

Pembelajaran yang disyorkan:

mysql. tutorial video

Atas ialah kandungan terperinci Adakah kemas kini dalam mysql mengunci jadual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn