


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!

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

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Peranan utama MySQL dalam aplikasi web adalah untuk menyimpan dan mengurus data. 1.MYSQL dengan cekap memproses maklumat pengguna, katalog produk, rekod urus niaga dan data lain. 2. Melalui pertanyaan SQL, pemaju boleh mengekstrak maklumat dari pangkalan data untuk menghasilkan kandungan dinamik. 3.MYSQL berfungsi berdasarkan model klien-pelayan untuk memastikan kelajuan pertanyaan yang boleh diterima.

Proses memulakan MySQL di Docker terdiri daripada langkah -langkah berikut: Tarik imej MySQL untuk membuat dan memulakan bekas, tetapkan kata laluan pengguna root, dan memetakan sambungan pengesahan port Buat pangkalan data dan pengguna memberikan semua kebenaran ke pangkalan data

Laravel adalah rangka kerja PHP untuk membina aplikasi web yang mudah. Ia menyediakan pelbagai ciri yang kuat termasuk: Pemasangan: Pasang Laravel CLI secara global dengan komposer dan buat aplikasi dalam direktori projek. Routing: Tentukan hubungan antara URL dan pengendali dalam laluan/web.php. Lihat: Buat pandangan dalam sumber/pandangan untuk menjadikan antara muka aplikasi. Integrasi Pangkalan Data: Menyediakan integrasi keluar-of-the-box dengan pangkalan data seperti MySQL dan menggunakan penghijrahan untuk membuat dan mengubah suai jadual. Model dan Pengawal: Model mewakili entiti pangkalan data dan proses pengawal permintaan HTTP.

Saya menghadapi masalah yang rumit ketika membangunkan aplikasi kecil: keperluan untuk mengintegrasikan perpustakaan operasi pangkalan data ringan dengan cepat. Selepas mencuba beberapa perpustakaan, saya mendapati bahawa mereka mempunyai terlalu banyak fungsi atau tidak serasi. Akhirnya, saya dapati Minii/DB, versi mudah berdasarkan YII2 yang menyelesaikan masalah saya dengan sempurna.

Ringkasan Artikel: Artikel ini menyediakan arahan langkah demi langkah terperinci untuk membimbing pembaca tentang cara memasang rangka kerja Laravel dengan mudah. Laravel adalah rangka kerja PHP yang kuat yang mempercepat proses pembangunan aplikasi web. Tutorial ini merangkumi proses pemasangan dari keperluan sistem untuk mengkonfigurasi pangkalan data dan menyediakan penghalaan. Dengan mengikuti langkah -langkah ini, pembaca dapat dengan cepat dan cekap meletakkan asas yang kukuh untuk projek Laravel mereka.

Kunci untuk memasang MySQL dengan elegan adalah untuk menambah repositori MySQL rasmi. Langkah -langkah khusus adalah seperti berikut: Muat turun kekunci GPG rasmi MySQL untuk mencegah serangan pancingan data. Tambah fail repositori MySQL: rpm -uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm kemas kini yum repository cache: yum update mysql: yum pemasangan mysql-server mysql Server.

MySQL dan phpmyadmin adalah alat pengurusan pangkalan data yang kuat. 1) MySQL digunakan untuk membuat pangkalan data dan jadual, dan untuk melaksanakan pertanyaan DML dan SQL. 2) Phpmyadmin menyediakan antara muka intuitif untuk pengurusan pangkalan data, pengurusan struktur meja, operasi data dan pengurusan kebenaran pengguna.

Berbanding dengan bahasa pengaturcaraan lain, MySQL digunakan terutamanya untuk menyimpan dan mengurus data, manakala bahasa lain seperti Python, Java, dan C digunakan untuk pemprosesan logik dan pembangunan aplikasi. MySQL terkenal dengan prestasi tinggi, skalabilitas dan sokongan silang platform, sesuai untuk keperluan pengurusan data, sementara bahasa lain mempunyai kelebihan dalam bidang masing-masing seperti analisis data, aplikasi perusahaan, dan pengaturcaraan sistem.
