Dalam artikel ini, kita akan bercakap tentang kunci niat sisipan dalam MySQL dan memperkenalkan apakah kunci niat sisipan? Mengapa saya perlu memasukkan kunci niat? Semoga ia membantu semua orang!
Masukkan Kunci Niat, kami juga memanggilnya kunci niat sisipan dalam bahasa Cina.
Ini boleh dikira sebagai tambahan kepada Gap Lock yang kami bincangkan sebelum ini, jika anda masih tidak faham, anda boleh rujuk: Record Lock, Gap Lock dan Next-. Kunci Kekunci.
Kami sudah mempunyai Gap Lock sebelum ini boleh membantu kami menyelesaikan masalah bacaan hantu. Walau bagaimanapun, sebelum ini Nampaknya ada beberapa masalah.
Andaikan saya mempunyai jadual berikut:
CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `age` (`age`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
id ialah kunci utama yang ditambah secara automatik. Kini terdapat data berikut dalam jadual:
Andaikan saya ingin melaksanakan SQL sisipan berikut:
begin;insert into user(username,age) values('wangwu',95);
Perhatikan bahawa SQL ini dilaksanakan tetapi transaksi belum dilakukan.
Mengikut pengetahuan yang kami pelajari tentang Gap Lock sebelum ini, julat Gap Lock pada masa ini ialah (89,99), yang bermaksud tiada umur dalam julat ini boleh dimasukkan.
Jika ini berlaku, rakan-rakan akan mendapati bahawa kecekapan pemasukan data adalah terlalu rendah, dan konflik kunci cenderung berlaku. Jadi apa yang perlu kita lakukan?
Kunci niat sisipan yang akan kami perkenalkan hari ini digunakan untuk menyelesaikan masalah ini.
Mari lihat pengenalan di laman web rasmi MySQL: kunci jurang yang ditetapkan oleh operasi INSERT sebelum baris sisipan. Kunci ini menandakan niat untuk memasukkan sedemikian rupa sehingga berbilang transaksi yang memasukkan ke dalam jurang indeks yang sama tidak perlu menunggu satu sama lain jika mereka tidak memasukkan pada kedudukan yang sama dalam jurang dari 4 dan 7. Asingkan transaksi yang cuba memasukkan nilai 5 dan 6, masing-masing, mengunci jurang antara 4 dan 7 dengan memasukkan kunci niat sebelum mendapatkan kunci eksklusif pada baris yang dimasukkan, tetapi jangan sekat setiap lain kerana baris tidak bercanggah.
Kunci niat sisipan ialah jurang yang ditetapkan sebelum Kunci operasi INSERT, kunci niat sisipan mewakili niat sisipan, iaitu, apabila berbilang transaksi yang berbeza memasukkan data ke dalam jurang yang sama indeks yang sama pada masa yang sama, mereka tidak perlu menunggu satu sama lain, iaitu, mereka tidak akan menyekat (jika anda hanya mengikut Mengikut kunci jurang sebelumnya teori, anda mesti menunggu kunci jurang dikeluarkan sebelum transaksi seterusnya boleh memasukkan data ke dalam jurang yang sama). Katakan terdapat rekod indeks dengan nilai 4 dan 7. Kini terdapat dua transaksi cuba memasukkan rekod dengan nilai 5 dan 6 masing-masing Setiap transaksi menggunakan kunci niat sisipan untuk mengunci antara 4 dan 7 sebelum mendapatkan kunci eksklusif baris yang disisipkan, tetapi kedua-dua transaksi tidak akan menyekat satu sama lain kerana baris tidak bercanggah. Ini adalah untuk memasukkan kunci niat.Terjemahan kasarnya ialah:
3. Berlatih
3.1 Kes 1
Sekarang transaksi dalam sesi A tidak dilakukan.
Seterusnya, kami juga melakukan operasi sisipan dalam sesi B:Kami mendapati sesi B juga boleh dilaksanakan seperti biasa tanpa menyekat.
Ini menunjukkan bahawa dua kunci niat sisipan adalah serasi dan boleh wujud bersama.3.2 Kes 2
Seterusnya dalam sesi B, laksanakan yang berikut Kod memasukkan baris data:
Kawan, anda boleh lihat bahawa operasi ini akan disekat! Sebab untuk menyekat ialah kunci niat sisipan dan kunci eksklusif adalah saling eksklusif.
Semasa penyekatan berlaku, dalam sesi C, kami menggunakan perintah show engine innodb statusG
yang digunakan dalam artikel sebelumnya untuk menyemak situasi penguncian, memfokuskan pada nod TRANSAKSI:
Dalam kandungan output, tempat di mana kotak merah dipilih jelas menunjukkan kewujudan kunci niat sisipan.
Untuk meringkaskan:
Masukkan kunci niat, sebenarnya Ia adalah kunci celah khas.
Kunci niat sisipan tidak saling eksklusif.
Sisipkan pengecualian bersama antara kunci niat dan kunci eksklusif.
Baiklah, jika anda mempunyai sebarang pertanyaan, sila tinggalkan mesej untuk perbincangan.
[Cadangan berkaitan: tutorial video mysql]
Atas ialah kandungan terperinci Artikel untuk membincangkan tentang kunci niat sisipan dalam MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!