Rumah  >  Artikel  >  pangkalan data  >  Ringkasan ciri ACID dan isu konkurensi transaksi MySQL

Ringkasan ciri ACID dan isu konkurensi transaksi MySQL

WBOY
WBOYke hadapan
2022-07-25 17:39:182360semak imbas

Artikel ini membawakan anda pengetahuan yang berkaitan tentang mysql Ia terutamanya memperkenalkan ciri-ciri ACID transaksi MySQL dan penyelesaian masalah serentak yang memerlukan boleh rujuk, semoga bermanfaat untuk semua.

Ringkasan ciri ACID dan isu konkurensi transaksi MySQL

Pembelajaran yang disyorkan: tutorial video mysql

1. Konsep transaksi

Satu transaksi ialah Unit tidak boleh dibahagikan yang terdiri daripada satu atau lebih penyata SQL yang beroperasi pada pangkalan data Hanya apabila semua operasi dalam urus niaga dilaksanakan secara normal, keseluruhan urus niaga akan diserahkan kepada pangkalan data Jika beberapa pemprosesan transaksi gagal, maka urus niaga tersebut akan menjadi Kepada kembalikan ke keadaan asal , oleh itu, sama ada semua urus niaga berjaya atau semua gagal.

Jadi anda harus ingat beberapa konsep asas urus niaga, seperti berikut:

Transaksi ialah pelaksanaan set pernyataan SQL, sama ada semuanya berjaya atau semua gagal , dan tiada bahagian daripadanya boleh muncul Kejayaan, keputusan kegagalan separa, operasi atom yang menjamin pelaksanaan transaksi. Hanya apabila semua pernyataan SQL transaksi berjaya dilaksanakan, transaksi boleh dilakukan dan keputusan ditulis pada cakera. Semasa pelaksanaan urus niaga, jika beberapa ralat SQL berlaku, urus niaga mesti digulung semula ke keadaan asal.

Sebagai contoh, perniagaan pemindahan memerlukan berbilang penyata SQL untuk dilengkapkan bersama Hanya apabila penyata SQL ini dilaksanakan dengan jayanya, perniagaan boleh dianggap berjaya.

Pemprosesan transaksi mempunyai tiga keadaan:

mula: Semua pernyataan SQL yang akan dilaksanakan untuk membuka transaksi Semua berjaya, dan kemudian komit melakukan transaksi Jika mana-mana pernyataan SQL menyebabkan pelaksanaan SQL yang tidak normal disebabkan oleh gangguan bekalan elektrik atau ralat pelayan, transaksi tidak akan diserahkan dan transaksi akan dilancarkan. kembali (gulung balik), data akan dipulihkan kepada keadaan sebelum transaksi dimulakan

Ini dijamin oleh enjin storan (dijamin oleh log buat semula dan buat asal log)

Enjin storan MyISAM tidak menyokong transaksi, manakala enjin storan InnoDB menyokong transaksi dan kunci baris.

Gunakan show enginesG untuk menyemak enjin storan yang disokong oleh pangkalan data semasa.

select @@autocommit;Lihat tetapan untuk status komitmen transaksi

Enjin pangkalan data boleh diubah suai buat sementara waktu melalui arahan, atau melalui fail Konfigurasi diubah suai secara kekal.

Jika perniagaan kami melibatkan transaksi, kami biasanya mengawal pembolehubah ini dalam kod Secara umumnya, urus niaga kami terdiri daripada berbilang SQL dan mesti memenuhi operasi atom transaksi, jadi kami menetapkannya kepada Serah secara manual. Jika perniagaan berjaya, transaksi akan diserahkan; jika terdapat kegagalan di tengah-tengah perniagaan, satu transaksi akan ditarik balik.

2. Ciri-ciri ASID

Setiap transaksi mesti memenuhi 4 ciri berikut:

Atomisitas urus niaga(Atomik): Transaksi ialah keseluruhan yang tidak boleh dibahagikan Urus niaga mesti mempunyai ciri atom, dan apabila urus niaga diubah, sama ada semua pelaksanaan atau tiada pelaksanaan , iaitu, penyiapan bahagian transaksi tidak dibenarkan. Transaksi Ketekalan (Ketekalan): Sebelum dan selepas transaksi dilaksanakan, data pangkalan data mesti mengekalkan keadaan yang konsisten . Keadaan ketekalan pangkalan data mestilah menjadi tanggungjawab pengguna dan dilaksanakan oleh mekanisme kawalan serentak. Ambil membeli-belah dalam talian sebagai contoh Hanya dengan membiarkan barang keluar dari gudang dan memasukkan keranjang belanja pelanggan boleh menyelesaikan transaksi. (Konsistensi bukan sahaja dicerminkan dalam urus niaga, tetapi juga termasuk pengenalan MySQL dalam lapisan storan. Untuk meningkatkan kecekapan capaian data tempat liputan, lapisan cache Redis atau cache Memery biasanya ditambahkan pada cache data hotspot, yang melibatkan data lapisan cache dan lapisan DB pangkalan data isu Konsistensi) Transaksi Pengasingan (Pengasingan): Apabila dua atau lebih transaksi dilaksanakan serentak, untuk memastikan keselamatan data, operasi dalam satu transaksi diasingkan daripada operasi urus niaga lain Tidak kelihatan kepada urus niaga pelaksana lain, menghalang urus niaga secara serentak daripada menjejaskan satu sama lain . Tahap pengasingan: keselamatan data dan konkurensi transaksi. Lebih ketat pengasingan, lebih tinggi keselamatan dan lebih rendah konkurensi (iaitu, kawalan serentak, memastikan keselamatan data) Ketahanan (Ketahanan) transaksi: Selepas transaksi selesai (urus niaga commit berjaya), DBMS menjamin Pengubahsuaiannya kepada data dalam pangkalan data adalah kekal , dan walaupun pangkalan data gagal kerana kegagalan, data itu sepatutnya boleh dipulihkan.

Perkara yang paling penting tentang MySQL ialah log, bukan data!

Ciri transaksi ACD dijamin oleh mekanisme log semula dan batal log MySQL; I pengasingan dijamin oleh mekanisme penguncian transaksi mysql.

3. Masalah dengan kesepakatan transaksi

Pemprosesan transaksi tidak diasingkan, dan masalah berikut biasanya berlaku apabila melaksanakan transaksi serentak:

Bacaan Kotor: Satu transaksi membaca data yang tidak terikat daripada transaksi lain. Contohnya, apabila urus niaga A dan urus niaga B dilaksanakan serentak, selepas urus niaga A dikemas kini, urus niaga B membuat pertanyaan dan membaca data A yang tidak terikat. Pada masa ini, urus niaga A digulung semula, dan data yang dibaca oleh urus niaga B adalah data kotor yang tidak sah (Transaksi B membaca data transaksi A yang tidak terikat)Bacaan tidak boleh berulang(Bacaan Tidak Boleh Diulang): Operasi satu transaksi menyebabkan transaksi lain membaca data berbeza dua kali sebelum dan selepas. Sebagai contoh, apabila transaksi A dan transaksi B dilaksanakan secara serentak, selepas transaksi B membuat pertanyaan dan membaca data, transaksi A mengemas kini data yang ditanya oleh transaksi B. Pada masa ini, transaksi B membaca data sekali lagi dan mendapati bahawa data dibaca dua kali sebelum dan selepas tidak sama. (Transaksi B membaca data transaksi A yang diserahkan)Baca Hantu(Baca Hantu) Baca Hantu: Operasi satu transaksi membawa kepada jumlah data hasil dua pertanyaan sebelum dan selepas satu lagi transaksi berbeza. Sebagai contoh, apabila transaksi A dan transaksi B dilaksanakan serentak, selepas transaksi B membuat pertanyaan dan membaca data, transaksi A menambah atau memadam rekod yang memenuhi syarat pertanyaan transaksi B. Pada masa ini, transaksi B bertanya semula dan mendapati bahawa transaksi sebelumnya pertanyaan tidak Rekod sedia ada, atau beberapa rekod daripada pertanyaan sebelumnya hilang. (Transaksi B membaca data transaksi A yang baru ditambah atau tidak dapat membaca data yang dipadamkan oleh transaksi A)

Bacaan kotor mesti dihapuskan kerana transaksi tidak dilakukan. Dalam sesetengah senario, bacaan tidak boleh berulang dan bacaan hantu dibenarkan (urus niaga telah dilakukan), tetapi tidak perlu dihapuskan (dengan menetapkan tahap pengasingan yang berbeza), yang ditentukan oleh keperluan senario aplikasi.

4 Perintah berkaitan transaksi

select @@autocommit;Semak sama ada MySQL secara automatik melakukan transaksi

0. bermaksud manual Serahkan transaksi, 1 bermaksud menyerahkan transaksi secara automatik, tetapkan kaedah penyerahan transaksi kepada penyerahan manual (hanya menjejaskan sesi semasa):

Pembelajaran yang disyorkan: tutorial video mysql

Atas ialah kandungan terperinci Ringkasan ciri ACID dan isu konkurensi transaksi MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:jb51.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam