Rumah > Artikel > pangkalan data > Adakah kemas kini dalam mysql mengunci jadual?
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.
Persekitaran pengendalian tutorial ini: sistem Windows 10, versi mysql8.0.22, komputer Dell G3.
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:
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 dikunciPembelajaran yang disyorkan:
mysql. tutorial videoAtas ialah kandungan terperinci Adakah kemas kini dalam mysql mengunci jadual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!