


Apakah kunci peringkat meja, kunci peringkat baris, kunci eksklusif dan kunci kongsi dalam MySQL?
Kata Pengantar
Disebabkan kerumitan perniagaan kami, berbilang penyata SQL berkaitan yang membentuk urus niaga diperlukan. Jadi, mari kita jelaskan dahulu apa itu transaksi. Transaksi merujuk kepada sekumpulan pernyataan SQL yang dilaksanakan bersama-sama Semua mesti dilaksanakan dengan jayanya atau semua gagal atau kegagalan separa tidak dibenarkan. Sesuatu urus niaga mempunyai ciri-ciri ACID:
Atomicity: sama ada semua berjaya atau semua gagal, untuk memastikan konsistensi transaksi
-
Konsistensi: Sebagai contoh, dalam pemindahan bank, memotong wang dari satu orang mesti menambah wang kepada orang lain. daripada data. Dimusnahkan; untuk dipindahkan ke cakera. Seperti yang ditulis di atas, jika terdapat gangguan bekalan elektrik, masa mati atau mula semula pada masa ini, kami mempunyai log semula untuk memastikan ketahanan pangkalan data
-
Pengasingan: Bahagian ini boleh menjelaskan mengapa urus niaga mesti diasingkan, kerana urus niaga mesti dibenarkan untuk dilaksanakan secara serentak Satu perniagaan melibatkan banyak transaksi, dan kita selalunya mempunyai banyak perniagaan di latar belakang untuk melaksanakan secara serentak. Jika semua transaksi dilaksanakan secara bersiri, Jika ya, maka apabila kita menulis program berbilang benang, kita hanya mempunyai satu utas untuk melakukan sesuatu, yang sangat tidak cekap. Oleh itu, urus niaga mesti dilaksanakan secara serentak, tetapi pelaksanaan serentak melibatkan beberapa isu:
Keselamatan & ketekalan transaksi dan - Isu kecekapan selaras
Kami menggunakan dua perkara ini sebagai titik rujukan konkurensi/pengasingan dalam MySQL Jika kita tidak mengasingkan transaksi sama sekali apabila melaksanakan secara serentak, bacaan kotor mungkin berlaku (urus niaga B membaca data transaksi A yang tidak terikat dan kemudian menggunakan transaksi A menggunakan data tidak komited untuk melaksanakan. pengiraan dan memperoleh banyak hasil lain, dan kemudian transaksi A melancarkan semula data tersebut Kemudian transaksi B mengira data bermasalah, dan bacaan kotor pasti akan menyebabkan masalah), Bacaan tidak boleh berulang (Dapatkan sekeping data di bawah. keadaan yang sama, dan kemudian mendapati bahawa nilai data telah berubah apabila membuat pertanyaan semula Sudah tentu, bacaan tidak boleh diulang mungkin tidak menyebabkan masalah dalam beberapa senario perniagaan data adalah berkaitan dengan ketat) dan bacaan hantu (jumlah data dalam hasil dua pertanyaan sebelum dan selepas keadaan yang sama berbeza dalam transaksi) adalah isu-isu ini. Kemudian untuk menyelesaikan masalah yang dihadapi dalam pelaksanaan transaksi serentak, kami memberikan tahap pengasingan transaksi:
Pensirian, pensirian dilaksanakan sepenuhnya menggunakan kunci Semua urus niaga diisih melalui kunci dan dilaksanakan dengan cara ini keselamatan data adalah tinggi tetapi kecekapan serentak adalah sangat rendah.
- Bacaan tidak komited untuk program berbilang benang yang kami tulis, tiada kawalan serentak untuk segmen kod bahagian kritikal Walaupun konkurensinya tinggi, keselamatan data adalah sangat rendah bacaan juga membenarkan kewujudan bacaan kotor, yang bermasalah jadi bacaan tanpa komitmen tidak boleh digunakan.
- Siri dan pembacaan tanpa komitmen tidak akan digunakan dalam projek sebenar Secara amnya, enjin pangkalan data berfungsi pada pembacaan komited dan bacaan boleh berulang secara lalai ini menggabungkan keselamatan & ketekalan data dan kecekapan serentak data dilaksanakan oleh mekanisme kawalan koncurrency berbilang versi MVCC
.
Baca diserahkan, tahap kerja lalai Oracle. Pembacaan data tidak terikat tidak dibenarkan Tahap ini masih membenarkan bacaan tidak berulang dan bacaan maya berlaku.
Bacaan berulang, tahap kerja lalai MySQL. Dijamin bahawa data yang sama masih akan diperoleh apabila transaksi dibaca semula, yang sebahagiannya menyelesaikan masalah bacaan maya, tetapi bacaan maya masih akan berlaku
Nota:
Semakin tinggi tahap pengasingan transaksi, semakin banyak prestasi dibelanjakan untuk mengelakkan konflik, yang ialah, kecekapan adalah rendah.
- Di peringkat "Baca Berulang", ia sebenarnya boleh menyelesaikan beberapa masalah bacaan maya, tetapi ia tidak dapat menghalang masalah bacaan maya yang disebabkan oleh kemas kini untuk melarang berlakunya maya berbunyi, anda masih perlu menetapkan tahap pengasingan Siri.
- Prinsip pelaksanaan tahap pengasingan transaksi:
- kunci+MVCC
. Prinsip pelaksanaan bersiri adalah kunci termasuk kunci kongsi, kunci eksklusif, kunci kongsi niat, kunci eksklusif niat, kunci celah dan jalan buntu Prinsip pelaksanaan asas pembacaan yang komited dan boleh dibaca berulang: MVCC (kawalan serentak Versi berbilang). MVCC menyediakan kaedah bacaan serentak, termasuk bacaan syot kilat (data yang sama akan mempunyai berbilang versi), bacaan semasa, buat asal log dan buat semula log.
MVCC ialah prinsip pembacaan yang komited dan pembacaan berulang, dan kunci ialah prinsip penyirian
Log transaksi digunakan untuk melaksanakan ciri ACID, manakala kunci kongsi, kunci eksklusif dan MVCC digunakan untuk melaksanakan ciri ketekalan (I). Log transaksi dibahagikan kepada log buat asal (log putar balik) dan log buat semula (log semula)
1. Kunci peringkat jadual & kunci peringkat baris
Kunci Aras Meja: Kunci keseluruhan meja. Overhed adalah kecil (kerana anda tidak perlu mencari rekod baris tertentu dalam jadual untuk menguncinya. Jika anda ingin mengubah suai jadual ini, anda terus memohon kunci meja ini), kuncinya pantas, dan tidak akan ada
Kebuntuan hadir;Kebutiran kunci adalah besar, kebarangkalian konflik kunci adalah tinggi, dan keselarasan adalah rendah
Kunci peringkat baris:Untuk rekod Baris tertentu dikunci. Ia mahal (anda perlu mencari rekod yang sepadan dalam jadual, dan terdapat proses mencari jadual dan indeks), mengunci adalah perlahan, dan kebuntuan akan berlaku adalah yang paling kecil, kebarangkalian konflik kunci adalah terendah, dan konkurensinya tinggi
Enjin storan MyISAM hanya menyokong kunci peringkat jadual, manakala InnoDB menyokong pemprosesan transaksi, kunci peringkat baris, dan konkurensi yang lebih baik
2. Kunci eksklusif & kunci kongsi
Kunci eksklusif: juga dikenali sebagai X kunci, tulis kunci
Kunci kongsi: Juga dikenali sebagai kunci S, kunci baca
Membaca (SS) ialah serasi, tetapi membaca dan menulis (SX, SX ), menulis dan menulis (XX) adalah saling eksklusif
1. Uji keserasian kunci eksklusif dan kunci kongsi antara transaksi yang berbeza
Kami mula-mula menyemak jadual SQL dan kandungan
Lihat tahap pengasingan:
Mula-mula buka transaksi A dan tambahkan kunci eksklusif pada data dengan id=7:
Buka transaksi B pada pelanggan lain:
Tidak kira menambah kunci eksklusif atau kunci kongsi pada id=7, ia disekat dan tidak boleh ditanya, kerana transaksi A Kunci eksklusif ditambahkan pada data dalam baris dengan id=7, yang merupakan kunci tulis Orang lain tidak boleh membaca atau menulis.
Ringkasan: Untuk kunci data antara transaksi yang berbeza, hanya kunci SS boleh wujud bersama, XX, SX dan XS tidak boleh wujud bersama
2. Kunci baris ujian ditambahkan pada pelaksanaan kunci pada item indeks
ditambah pada pokok indeks.
Setiap kali anda menyelesaikan ujian, gulung semula perkara yang baru anda lakukan.
Gunakan medan tidak diindeks jadual sebagai syarat penapis
Kini transaksi 2 mendapat rekod baris berbeza chenwei
InnoDB menyokong kunci baris Apabila id kunci utama digunakan sebagai syarat penapis sebentar tadi, transaksi 1 dan transaksi 2 boleh berjaya memperoleh kunci untuk baris yang berbeza. Walau bagaimanapun, kini kami mendapati bahawa kami tidak boleh mendapatkan kunci eksklusif bernama chenwei Mengapa ini? Mari jelaskan:
Kunci baris InnoDB dilaksanakan dengan mengunci entri indeks, bukannya mengunci rekod baris jadual
Dan kami Menggunakan nama sebagai keadaan penapis tidak menggunakan indeks , jadi secara semula jadi kunci baris tidak akan digunakan, tetapi kunci meja akan digunakan. Ini bermakna InnoDB menggunakan kunci peringkat baris hanya apabila data diambil melalui indeks, jika tidak InnoDB akan menggunakan kunci jadual!!!
Kami menambah indeks pada medan nama:
Kemudian lakukan operasi tadi:
Kami mendapati bahawa selepas menambah indeks pada nama, dua transaksi boleh mendapatkan kunci eksklusif (untuk kemas kini) pada baris yang berbeza, yang sekali lagi membuktikan bahawa kunci baris InnoDB ditambahkan pada item indeks.
Oleh kerana nama kini dalam indeks, gunakan zhangsan untuk mencari id rekod baris di mana ia terletak pada pokok indeks tambahan, iaitu 7, dan kemudian pergi ke pepohon indeks kunci utama untuk mendapatkan baris yang sepadan Rekod kunci eksklusif (tekaan peribadi ialah rekod yang sepadan dalam pepohon indeks tambahan dan pepohon indeks kunci utama dikunci)
3
Sirikan semua urus niaga adalah semua kunci kongsi atau kunci eksklusif, tidak perlu menambahnya secara manual. Select memperoleh kunci yang dikongsi, manakala sisipkan, padam dan kemas kini memperoleh kunci eksklusif.Tetapkan tahap pengasingan bersiri:
Dua transaksi boleh memperoleh kunci kongsi pada masa yang sama (kewujudan bersama SS:
Sekarang biar transaksi 2 masukkan data;
gulung semula dan semua status perolehan kunci digulung semula:
Buka dua transaksi:
Kemas kini Transaksi 2;
Mari kita gunakannya sekali lagi Cuba indeks kunci utama untuk melihat sama ada kemas kini id
masih disekat walaupun medan di belakang tempat kami kini menggunakan id bukannya nama, nama itu juga ditemui melalui pepohon indeks tambahan Kunci utama yang sepadan kemudiannya dicari untuk rekod yang sepadan dalam pepohon indeks kunci utama dan rekod pada pepohon indeks kunci utama dikunci
Kami mengemas kini data dengan id=8 dengan jayanya kerana apabila kami memilih, kami hanya memberikannya Data dengan id=7 mempunyai kunci baris Sudah tentu, kami boleh berjaya mengendalikan data dengan id=8
Siri menggunakan kunci eksklusif dan kunci kongsi Pada tahap bacaan yang boleh diulang, jika anda tidak mengunci secara manual, MVCC sebenarnya tidak menggunakan kunci secara manual buat indeks, ia menggunakan kunci jadual. Jika item indeks digunakan dalam pertanyaan, ia menggunakan kunci baris adalah Kunci indeks dan bukannya mengunci baris data
.Atas ialah kandungan terperinci Apakah kunci peringkat meja, kunci peringkat baris, kunci eksklusif dan kunci kongsi dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

MySQL adalah sistem pengurusan pangkalan data relasi sumber terbuka, terutamanya digunakan untuk menyimpan dan mengambil data dengan cepat dan boleh dipercayai. Prinsip kerjanya termasuk permintaan pelanggan, resolusi pertanyaan, pelaksanaan pertanyaan dan hasil pulangan. Contoh penggunaan termasuk membuat jadual, memasukkan dan menanyakan data, dan ciri -ciri canggih seperti Operasi Join. Kesalahan umum melibatkan sintaks SQL, jenis data, dan keizinan, dan cadangan pengoptimuman termasuk penggunaan indeks, pertanyaan yang dioptimumkan, dan pembahagian jadual.

MySQL adalah sistem pengurusan pangkalan data sumber terbuka yang sesuai untuk penyimpanan data, pengurusan, pertanyaan dan keselamatan. 1. Ia menyokong pelbagai sistem operasi dan digunakan secara meluas dalam aplikasi web dan bidang lain. 2. Melalui seni bina pelanggan-pelayan dan enjin penyimpanan yang berbeza, MySQL memproses data dengan cekap. 3. Penggunaan asas termasuk membuat pangkalan data dan jadual, memasukkan, menanyakan dan mengemas kini data. 4. Penggunaan lanjutan melibatkan pertanyaan kompleks dan prosedur yang disimpan. 5. Kesilapan umum boleh disahpepijat melalui pernyataan yang dijelaskan. 6. Pengoptimuman Prestasi termasuk penggunaan indeks rasional dan pernyataan pertanyaan yang dioptimumkan.

MySQL dipilih untuk prestasi, kebolehpercayaan, kemudahan penggunaan, dan sokongan komuniti. 1.MYSQL Menyediakan fungsi penyimpanan dan pengambilan data yang cekap, menyokong pelbagai jenis data dan operasi pertanyaan lanjutan. 2. Mengamalkan seni bina pelanggan-pelayan dan enjin penyimpanan berganda untuk menyokong urus niaga dan pengoptimuman pertanyaan. 3. Mudah digunakan, menyokong pelbagai sistem operasi dan bahasa pengaturcaraan. 4. Mempunyai sokongan komuniti yang kuat dan menyediakan sumber dan penyelesaian yang kaya.

Mekanisme kunci InnoDB termasuk kunci bersama, kunci eksklusif, kunci niat, kunci rekod, kunci jurang dan kunci utama seterusnya. 1. Kunci dikongsi membolehkan urus niaga membaca data tanpa menghalang urus niaga lain dari membaca. 2. Kunci eksklusif menghalang urus niaga lain daripada membaca dan mengubah suai data. 3. Niat Kunci mengoptimumkan kecekapan kunci. 4. Rekod Rekod Kunci Kunci Rekod. 5. Gap Lock Locks Index Rakaman Gap. 6. Kunci kunci seterusnya adalah gabungan kunci rekod dan kunci jurang untuk memastikan konsistensi data.

Sebab -sebab utama prestasi pertanyaan MySQL yang lemah termasuk tidak menggunakan indeks, pemilihan pelan pelaksanaan yang salah oleh pengoptimasi pertanyaan, reka bentuk jadual yang tidak munasabah, jumlah data yang berlebihan dan persaingan kunci. 1. Tiada indeks menyebabkan pertanyaan perlahan, dan menambah indeks dapat meningkatkan prestasi dengan ketara. 2. Gunakan perintah Jelaskan untuk menganalisis pelan pertanyaan dan cari ralat pengoptimuman. 3. Membina semula struktur meja dan mengoptimumkan keadaan gabungan dapat meningkatkan masalah reka bentuk jadual. 4. Apabila jumlah data adalah besar, pembahagian dan strategi bahagian meja diterima pakai. 5. Dalam persekitaran konkurensi yang tinggi, mengoptimumkan urus niaga dan strategi mengunci dapat mengurangkan persaingan kunci.

Dalam pengoptimuman pangkalan data, strategi pengindeksan hendaklah dipilih mengikut keperluan pertanyaan: 1. Apabila pertanyaan melibatkan pelbagai lajur dan urutan syarat ditetapkan, gunakan indeks komposit; 2. Apabila pertanyaan melibatkan pelbagai lajur tetapi urutan syarat tidak ditetapkan, gunakan pelbagai indeks lajur tunggal. Indeks komposit sesuai untuk mengoptimumkan pertanyaan berbilang lajur, manakala indeks lajur tunggal sesuai untuk pertanyaan tunggal lajur.

Untuk mengoptimumkan pertanyaan perlahan MySQL, SlowQuerylog dan Performance_Schema perlu digunakan: 1. Dayakan SlowQueryLog dan tetapkan ambang untuk merakam pertanyaan perlahan; 2. Gunakan Performance_Schema untuk menganalisis butiran pelaksanaan pertanyaan, cari kesesakan prestasi dan mengoptimumkan.

MySQL dan SQL adalah kemahiran penting untuk pemaju. 1.MYSQL adalah sistem pengurusan pangkalan data sumber terbuka, dan SQL adalah bahasa standard yang digunakan untuk mengurus dan mengendalikan pangkalan data. 2.MYSQL menyokong pelbagai enjin penyimpanan melalui penyimpanan data yang cekap dan fungsi pengambilan semula, dan SQL melengkapkan operasi data yang kompleks melalui pernyataan mudah. 3. Contoh penggunaan termasuk pertanyaan asas dan pertanyaan lanjutan, seperti penapisan dan penyortiran mengikut keadaan. 4. Kesilapan umum termasuk kesilapan sintaks dan isu -isu prestasi, yang boleh dioptimumkan dengan memeriksa penyataan SQL dan menggunakan perintah menjelaskan. 5. Teknik pengoptimuman prestasi termasuk menggunakan indeks, mengelakkan pengimbasan jadual penuh, mengoptimumkan operasi menyertai dan meningkatkan kebolehbacaan kod.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini