Internet Derazalar Android
Kengaytirmoq

MySQL-dagi tranzaktsiyaga kirish. Ma'lum bo'lishicha, hamma biladi, lekin hamma ham tushunmaydi

Bitim bu ma'lumotlar bazasida bir nechta o'zgarishlarni yagona operatsiya sifatida izohlashga imkon beradigan mexanizmdir. Barcha o'zgarishlar olinadi yoki barchasi rad qilinadi. Boshqa sessiyada na stolga kira olmaydi, u erda ochiq bitim mavjud bo'lib, unda ushbu jadvalda har qanday o'zgarishlar amalga oshiriladi. Agar siz o'zgarganingizdan so'ng darhol ma'lumotlar tanlovini o'tkazishga harakat qilsangiz, barcha o'zgarishlar mavjud bo'ladi.

InnoDB yoki BDB kabi operatsiyalar bazasini qo'llab-quvvatlash mexanizmi boshlang'ich operatsiya operatsiyasini boshlaydi. O'zgarishlarni tasdiqlash yoki bekor qilishda bitim tugatiladi. Siz operatsiyani ikki buyruq bilan yakunlashingiz mumkin. BIRINChI BERADI Ma'lumotlar bazasidagi barcha o'zgarishlarni tejaydi. Orqaga qaytarish buyrug'i barcha o'zgarishlarni bekor qiladi.

Masalan, tranzaktsiyalarni qo'llab-quvvatlash bilan bog'liq stol quyida keltirilgan, ma'lumotlar esa, keyin bitim o'chiriladi, unda ma'lumotlar o'chiriladi, ularda ma'lumotlar o'chiriladi va tranzaktsiya qaytariladi (o'chirishning bekor qilinishi):

Jadval namunasi_innodb (ID IR (11) NOL Auto_increment emas (150) Standart Nome (150) Standart Nome (ID)) Dvigatel \u003d UTF8; Samod_innodb qadriyatlariga (1, "Aleksandr"), (2, "Dmitriy") ga qo'shing; Operatsiya qilishni boshlash; Sama_innodb-dan o'chirish qaerda Id \u003d 1; Samod_innodb-dan o'chirish ID \u003d 2; orqaga qaytarish;

Bitimni qaytarish ro'yxati sodir bo'lganligi sababli, jadvaldagi ma'lumotlar o'chirilmadi.

Agar orqaga qaytarish o'rniga biz majburiyatni yozdik, keyin ikkala satr o'chiriladi.

Bir vaqtning o'zida bir vaqtning o'zida aniq qo'llanilishi va amalga oshirilishi kerak bo'lganda bitimlar talab qilinadi. Agar biror narsa noto'g'ri bo'lsa, ularning hech biri bajarilmadi.

Bunga misol sifatida siz ba'zi saytga to'lov tizimini olib kelishingiz mumkin. Xarid qilish paytida buyurtma to'langan deb belgilanishi kerak va shu bilan birga siz foydalanuvchining balansidan pulni yozishingiz kerak. Agar biror narsa noto'g'ri bo'lsa - u erda sotib olingan mahsulotsiz va pulsiz yoki mahsulotsiz do'kon yoki pulsiz do'kon bo'ladi. Va bitimlar yordamida biz osongina bundan qochishimiz mumkin.

Qarz uchun men ba'zan men pozitsiyaga intervyu o'tkazishim kerak "[Katta | Junior] Python / Django", "Timlid". Mening ajoyib ajablanarli ekanligimni aniqladim, bu xulosada "MySQL / Innodb / Indonds / Tradir" so'zlari va hokazolar "va hokazo" va hokazolar ". Afsuski, foydalanish variantining yagona tavsifi emas.

Keyin, men keyingi vaziyat uchun echim variantini taklif qilishga harakat qildim:

Aytaylik, biz o'z navbatida, tashqi maosh oladigan ba'zi tashqi maosh oladigan (xizmatni faollashtirish yoki joningiz mamnun bo'lgan), bizning xizmatimiz APIdan foydalanish uchun pul to'laydi. Bizning tizimimizdagi foydalanuvchi xizmatni faollashtirish, barcha maydonlarni to'ldirish va "faol xizmat" tugmasining so'nggi sahifasida so'rovni yaratadi. Ya'ni HTTP so'rovini yuborish paytida bizning ma'lumotlar bazamizda kirishimiz (xizmatni faollashtirish uchun so'rov). Bizning algoritmimiz nima? - so'rayman va davom etyapman:

Foydalanuvchi bazasini ma'lumotlar bazasidan olib chiqing;
- Agar muvozanat etarli bo'lsa, keyin APIni torting;
- Agar hamma narsa yaxshi bo'lsa, biz xizmat uchun balans miqdorini yozib qo'yamiz, yangilang, aksincha siz orqaga qaytasiz;
- Biz foydalanuvchiga javob beramiz.

Hamma narsasi shubhasiz tuyuldi, lekin men birinchi va ravshan muammoni 10 raqobatchi so'rov shaklida olib kelganda (ularning barchasi bir xil muvozanatni qabul qilishlari va APIga qo'ng'iroq qilishlari mumkin), echimlar eng murakkab narsalarni taklif qila boshlaydi 5 Sinsatorlarni ijro etishdan (e'tirof etishga arziydi, men ushbu tamg'ada hech narsa tushunmadim), elektron pullar, ma'lumotlar bazasidagi yangi jadvallardan, slips-dan foydalanish, sirlar va hanuzgacha nima tushunmayapman.

Ma'lumki, MySQL-da InnoDB innostdb tranzal mexanizmini va qatorni qulflash imkoniyatini beradi. Ushbu qisqa qulfni qo'llash uchun, Selec-A oxirida yangilanishni qo'shish kifoya, masalan:

Yangilash uchun ID \u003d 5 bo'lgan so'rovlardan * ni tanlang

Tranzaktsiya boshlanadi va ma'lumotlar bazasiga bo'lgan barcha sessiyalar bizning tranzaktsiyalarimiz tugashidan oldin shunga o'xshash so'rov o'tkazib bo'lmaydi, ular shunchaki kutishadi. Xuddi shu rekordni o'qish uchun bitim izolyatsiya darajasiga bog'liq bo'lgan davlatda mavjud bo'ladi.

Shuni ta'kidlash kerakki, yangilanish uchun foydalanish avtoromit o'chirilganligi yaxshiroq, chunki siz qulflangan narsalardan qat'iy nazar, birinchi yangilanishdan so'ng, lokomotek.

Bu arzimas ko'rinadi, bu aniq ko'rinadi, ammo 10 dan 9tasi ...

Yangilanish.
Maqolada oshkor etilmagan "MySQL-dagi bitim" ning avvalgi nomi "MySQL-dagi tranzaktsiyalar" bilan almashtirildi va

Zy.
Maqolada API bitim doirasiga kirishi va muvaffaqiyatsizlik va qanday qilib favqulodda vaziyatlarni qayta ishlash kerakligi haqida aytilmagan.

Bitimlar mexanizmi faqat InnoDB va BDB tomonidan qo'llab-quvvatlanadi. Shuning uchun, siz ishlashni istagan barcha jadvallar siz tegishli turga o'tishi kerak. Mumkin.

  • Odatiy bo'lib, MySQL AutoComm rejimida ishlaydi. Bu har qanday SQL operatorining o'qilishini amalga oshirish natijalari ma'lumotlarni o'zgartirishi natijasida darhol saqlanib qoladi.
    AutoCommit rejimi shunga o'xshash o'chirilishi mumkin: AutoCommit \u003d 0;
  • Agar siz AutoCommit rejimidan faqat buyruqlarning ketma-ketligini o'tkazish uchun siz boshlang'ich buyrug'idan foydalanishingiz mumkin (MySQL versiyasi 4,0.11.)
  • Tanlangan jadvallar jadvalida tanlangan tovarlar sonini tuzatadigan va tovarlar jadvaliga o'zgartirish kiritadigan SQL so'roviga misol:
    Operatsiya qilishni boshlash; Tuzatishlar kiritish ID_GODS \u003d: Id_Goods, raqam \u003d: Raqam, ID_ODERS \u003d: Id_Daters \u003d: Raqam; raqami: soni; Yangilanish Baholar Seter \u003d Zaxir +: Raqam, mavjud \u003d mavjud -: ID \u003d: Id_Goodsning raqami; Majburiyat;
  • Bitim komisor operator tomonidan yakunlanadi. O'zgarishlar saqlanadi. So'rovlardan birida xato yuz berganda, o'zgarishlar har qanday stolda saqlanmaydi.
  • Agar siz yanada murakkab o'zgartirish mexanizmini yaratishingiz, SavePoint buyruqlariga SavePoint-dan foydalaning va qaytaring
  • Quyidagi operatorlar tranzaktatorni to'liq yakunladilar (agar bajarilishdan oldin amalga oshirilgan bo'lsa):
    • Jadvalni o'zgartiring
    • DAVLAT MA'LUMOTI.
    • Master ma'lumotlarini yuklang.
    • AutoCommit \u003d 1
    • Boshlanishi.
    • Tomchi indeksi
    • Jadvallarni qulflash
    • To'lovni boshlash.
    • Indeksni yaratish
    • Drop stol
    • Jadvalni o'zgartirish
    • Kesish stoli
  • PHP Pdo o'z mablag'larini tranzaktsiyalar bilan ishlashni taklif etadi. Ular ular haqida o'qish mumkin.
  • Parallel operatsiyalar va izolyatsiya darajasi (birgalikda kirish)

    Tasavvur qiling, yana bir foydalanuvchi ikkinchi parallel bitimni tuzdi va bizning foydalanuvchi so'rovini kiritdi * Bizda "Foydalanuvchi uchun" foydalanuvchi so'rovini kiritdi "Foydalanuvchi (ID, Nik) qiymatlari (1, Nik) qiymatlarini (1, Nik) kiritdi Nikola) tranzaktsiyalar).
    Ikkinchi Bitim foydalanuvchisi nimani ko'radi?
    U birinchi bitim natijalari hal qilinmagan bo'lsa ham, u yozuv yozuvini ko'rishi mumkinmi? Yoki birinchi bitim natijalari hal qilingandan keyingina o'zgarishlarni ko'rishi mumkinmi?

    Ma'lum bo'lishicha, ikkalasi ham mavjud. Bularning barchasi bitimni izolyatsiya qilish darajasiga bog'liq.

    Bitim mavjud Iyakchilik darajasi:

    • 0 - Tasdiqlanmagan ma'lumotlarni o'qish (iflos o'qish) (noaniq o'qish) - izolyatsiyaning eng past darajasi. Ushbu darajada parallel operatsiyalarda etarli bo'lmagan o'zgarishlarni o'qish mumkin. Bunday holda, ikkinchi foydalanuvchi birinchi bloklangan bitimdan kiritilgan yozuvni ko'radi. Istalgan vaqtda, bunday o'qish xatolar manbai bo'lganligi sababli, ulanmagan bitim rad etilishi uchun kafolat yo'q.
    • 1 - Tasdiqlangan ma'lumotlarni o'qish (qilingan) - faqat hisob qaydnomalarini o'qitish mumkin. Ammo bu darajada ikkita muammo bor. Ushbu rejimda namunada bitim doirasida ishtirok etadigan chiziqlar boshqa parallel operatsiyalar uchun bloklanmagan, №1 muammo quyidagicha quyidagilar mavjud:

      "Unsiz o'qish" (Takrorlanadigan o'qilmaydi) - bu bir nechta namunalar (Select), ushbu namunalarda ishtirok etadigan ma'lumotlarni o'zgartiradigan ushbu namunalar o'rtasida parallel bitimlar oralig'ida amalga oshiriladi. Parallel bitim ma'lumotlarni o'zgartirganligi sababli, birinchi operatsiyada bir xil mezonlar bo'yicha keyingi namunaning natijasi har xil bo'ladi.

      2 raqami - "Fantom o'qish" - Bu ish quyida muhokama qilinadi.

    • 2 - takrorlanadigan o'qish (takrorlanadigan o'qish, surat) - ushbu izolyatsiya darajasida ma'lumotni faqat asosiy operatsiyalarni o'qish mumkin. Bundan tashqari, ushbu darajada "Rad etishdan boshlanmaydigan o'qish", ya'ni bitim doirasida namunada ishtirok etadigan chiziqlar bloklanadi va boshqa parallel bitimlar tomonidan o'zgartirilmaydi. Ammo jadvallar butunlay bloklanmagan. Shu sababli, "xayolot o'qish" muammosi qolmoqda. "Fantom o'qish" - bu bitta bitimni ijro etish paytida bir xil namunalarning natijasi o'zgarishi mumkin, chunki butun stol bloklangan, ammo faqat namunada ishtirok etadigan chiziqlar. Bu shuni anglatadiki, parallel operatsiyalar stolda satrlarni kiritishi mumkin, shuning uchun ikkalasi ma'lumotlarga parallel operatsiyalarni kiritishda boshqa vaqtlarda turli xil natija berishi mumkin.
    • 3 - serializizatsiyalanadigan (serializizatsiyalanadigan) - serializizatsiya qilinadigan tranzaksiyalar. Bitim izolyatsiyasining eng ishonchli darajasi, ammo shu bilan birga eng sekin. Ushbu darajada parallel operatsiyalar hech qanday muammo bo'lmaydi, ammo bu uchun tizim tezligini to'lashi kerak va ko'p holatlarda tezlik juda muhimdir.

    Odatiy bo'lib, № 2 izolyatsiyasi darajasi MySQL-da o'rnatiladi (takrorlanadi). O'ylaymanki, MySQL ishlab chiquvchilar behuda ishlamadilar, chunki bu ko'p holatlar uchun eng muvaffaqiyatli bo'lgan. Birinchi marta, eng yaxshi variantning eng yaxshi varianti eng ishonchli, ammo amalda siz arizangizning juda sekin ishlashi sababli katta noqulaylik tug'dirishi mumkin. Shuni yodda tutingki, ko'p narsa ma'lumotlar bazasida bitimlar bazasida izolyatsiya qilish darajasi qanday va sizning arizangiz qanday ishlab chiqilganligi haqida bog'liq emas. Minnatdorchilik dasturlari bilan siz bitim izolyatoridan eng past darajasini ishlatishingiz mumkin - bu sizning arizangizni ishlab chiqishning tuzilishi va savodxonligi xususiyatlariga bog'liq. Ammo izolyatsiyaning eng past darajasiga intilish kerak emas - yo'q, agar siz eng xavfsiz rejimdan foydalansangiz, siz parallel operatsiyalar muammolarini eslab qolishingiz kerak, bu holda siz chalkashib ketmaysiz va hamma narsani to'g'ri bajarmaysiz.

    To'lovni o'rnatish - Ushbu operator keyingi sessiya uchun keyingi bitimni izolyatsiya qilish darajasini belgilaydi.

    Bitim izolyatsiya darajasini belgilang (bo'shatilmagan | o'qilmagan | Takroriy o'qish | Taksilanishli o'qish | Serializizatsiya

    Mavjud birikmalar ta'sir qilmaydi. Ushbu operatorni bajarish uchun siz juda katta imtiyozga ega bo'lishingiz kerak. Sessiya kalit so'zini qo'llash kelajakdagi barcha operatsiyalarning standart darajasini belgilaydi.

    Siz shuningdek, Mysqld serveri uchun dastlabki global izolyatsiya darajasini-sarf-ajratish variantini o'rnatishingiz mumkin.

    Bitim - bu bir yoki bir nechta ma'lumotlar bazasidan iborat operatsiyadir. Bitimlarning mohiyati - bitta bitim doirasidagi barcha so'rovlarni to'g'ri bajarilishini ta'minlash, shuningdek bir-biridan qo'shimcha ma'lumot olish imkoniyatini hal qilish uchun bitim izolyatsiya mexanizmini ta'minlash.

    Har qanday bitim butunlay bajariladi yoki umuman bajarilmaydi.

    Bitim modelida ikkita asosiy tushuncha mavjud: majburiyat va orqaga qaytarish. Bir majburiyat bitimdagi barcha o'zgarishlarni belgilash degani. Tranzaktsiyada yuz bergan o'zgarishlarning bekor qilinishini (qaytarish) anglatadi.

    Tranzaktsiya boshlanganda, keyingi barcha o'zgarishlar vaqtincha saqlashda saqlanadi. Agar majburiyat bo'lsa, yagona bitim doirasida amalga oshirilgan barcha o'zgarishlar jismoniy ma'lumotlar bazasida qoladi. Agar Rollback amalga oshirilsa, ushbu operatsiya doirasida amalga oshirilgan barcha o'zgarishlar orqaga qaytariladi.

    MySQL bitimlarida faqat InnoDB jadvallari tomonidan qo'llab-quvvatlanadi. MyIsam operatsiya jadvallari qo'llab-quvvatlanmaydi. InnoDB innovat - bu standart avtokommit, bu har bir so'rov bitta bitimga teng ekanligini anglatadi.

    Tranzaktsiya maxsus "operatsiya" yoki "boshlang'ich" dan boshlanadi. Bitimni bajarish uchun siz o'zgartirishlarni amalga oshirishingiz kerak (so'rov qilish) yoki ularga orqaga qaytarish (orqaga qaytarish).

    Misolga misol:

    Operatsiya qilishni boshlash; (shuningdek, yozishingiz mumkin Boshlanishi.;) ... ma'lumotlar bazasi bilan ba'zi harakatlar (qo'shish, yangilash, o'chirish ...) majburiyat; // Amallarni belgilash, ularni jismoniy ma'lumotlar bazasida yozib oling

    Rollback bilan misol:

    AutoCommit \u003d 0; // avtomatik ravishda o'chirilgan Operatsiya qilishni boshlash; ... ma'lumotlar bazasi bilan ba'zi harakatlar (qo'shish, yangilash, o'chirish ...) orqaga qaytarish; // bir qator harakatlarni qaytarib oling, jismoniy ma'lumotlar bazasiga yozmang

    MyQL-da, ichki ishlar mexanizmi mavjud emas. BD ulanish bitta bitdir. Bitta ulanish bo'yicha yangi bitim faqat avvalgi bittasi tugagandan keyingina boshlanishi mumkin.

    Ba'zi operatorlar uchun orqaga qaytarish mumkin emas. Bular ma'lumotlar ta'rifi to'g'risidagi bayonotlar (ma'lumotlar ta'rifi - DDL). Bunga bu, o'zgartirish, tushirish, kesish, izoh va sharhlarni o'zgartirishni o'z ichiga oladi.

    Quyidagi operatorlar tranzaktatorni to'liq yakunladilar (agar bajarilishdan oldin amalga oshirilgan bo'lsa):

    • Jadvalni o'zgartiring
    • DAVLAT MA'LUMOTI.
    • Master ma'lumotlarini yuklang.
    • AutoCommit \u003d 1
    • Boshlanishi.
    • Tomchi indeksi
    • Jadvallarni qulflash
    • To'lovni boshlash.
    • Indeksni yaratish
    • Drop stol
    • Jadvalni o'zgartirish
    • Kesish stoli

    Shuni yodda tutingki, SQL xatolari holatida, bitimning o'zi orqaga qaytmaydi. Odatda xatolar, masalan, arizada SQL o'rash, masalan, masalan php posti kabi qayta ishlanadi. Agar siz to'g'ridan-to'g'ri MySQL-da xatolik yuzasidan o'zgarishlarni orqaga qaytarmoqchi bo'lsangiz, siz maxsus protsedurani yaratishingiz va uni boshqaruvchida qaytarishingiz mumkin:

    PRC_TEST () protsedurani yaratish SQLException uchun chiqish ishlov beruvchiga qaytarishni boshlaydi; // Bu erda xatolik yuz bergan taqdirda bitimni orqaga qaytaring; Operatsiya qilishni boshlash; Tmp_Tabble qiymatlarini ("null") joylashtiring; Majburiyat; Oxiri; PRC_TEST () ga qo'ng'iroq qiling;

    Ammo bu usul harakatga qo'llanma emas, balki tanishish ehtimoli ko'proq. Nima uchun? Men buni chindan ham tavsiya qilmayman, chunki asosan, andozalar bazasi xatolari, masalan, PHP posti kabi, masalan, u erdan tranzaktsiyalarni to'liq boshqarish uchun.

    Amaliy misolni ko'rib chiqing: 2 stol, foydalanuvchilar - foydalanuvchilar va foydalanuvchi ma'lumotlari mavjud - User_info. Tasavvur qiling-a, biz ham bazaga 3 ta ma'lumotlar bazasini bajarishi yoki umuman bajarmang, aks holda u qo'llanmaning muvaffaqiyatsizligiga olib keladi.

    Operatsiya qilishni boshlash; Foydalanuvchi (ID, Nik) qiymatlarini (1, "Nikola") joylashtiring; Foydalanuvchi_info (ID, ID, ID_USER, ISS_Name, mahsulot_value) qiymatlarini (1, 1, "nomi", "Nikolay") Foydalanuvchi_info (ID, ID, ID_USER, ID_NAME, ID_VALIUE, ID_VALUE) qiymatlarini (2, 1, "Yosh", "24") Majburiyat;

    Umuman olganda, menimcha, bitimning ishlash printsipi tushunarli. Ammo hamma narsa unchalik oddiy emas. Parallel operatsiyalar muammolari mavjud. Misolni ko'rib chiqaylik. Tasavvur qiling, ushbu bitimni amalga oshirish jarayonida yana bir foydalanuvchi ikkinchi parallel bitimni tuzdi va "Foydalanuvchi" so'rovini kiritdi * Bitta so'rovdan so'ng "Foydalanuvchi talabiga binoan" Foydalanuvchi (ID, Nik) qiymatidan (1, 'Nikola »hisobidan amalga oshirildi. Ikkinchi Bitim foydalanuvchisi nimani ko'radi? U birinchi bitim natijalari hal qilinmagan bo'lsa ham, u yozuv yozuvini ko'rishi mumkinmi? Yoki birinchi bitim natijalari hal qilingandan keyingina o'zgarishlarni ko'rishi mumkinmi? Ma'lum bo'lishicha, ikkalasi ham mavjud. Bularning barchasi bitimni izolyatsiya qilish darajasiga bog'liq.

    Bitimlar 4 darajali izolyatsiyaga ega:

    • 0 - Tasdiqlanmagan ma'lumotlarni o'qish (iflos o'qish) (Ishlamagan, ifloslangan, iflos o'qish) - izolyatsiyaning eng past darajasi. Ushbu darajada parallel operatsiyalarda etarli bo'lmagan o'zgarishlarni o'qish mumkin. Bunday holda, ikkinchi foydalanuvchi birinchi bloklangan bitimdan kiritilgan yozuvni ko'radi. Iste'mol qilinadigan bitim rad qilinishi uchun hech qanday kafolat yo'q, shuning uchun ushbu o'qish xatolar manbai hisoblanadi.
    • 1 - Tasdiqlangan ma'lumotlarni o'qish (Yasis qilingan) - faqat belgilangan operatsiyalar ma'lumotlarini o'qish mumkin. Ammo bu darajada ikkita muammo bor. Ushbu rejimda bitim doirasida tanlovda ishtirok etadigan satrlar boshqa parallel operatsiyalar uchun bloklanmagan, bu "takrorlanmaydigan o'quvchi" (takrorlanmaydigan o'quvchi) bir necha holatda Namunalar bir xil mezonlarga muvofiq amalga oshiriladi (Select) ushbu namunalarda ma'lumotlarni o'zgartiradigan ushbu namunalar o'rtasida ushbu namunalar o'rtasida tahlil qilinadi. Parallel bitim ma'lumotlarni o'zgartirganligi sababli, birinchi operatsiyada bir xil mezonlar bo'yicha keyingi namunaning natijasi har xil bo'ladi. 2-sonli muammo - "xayoliy o'qish" - bu ish quyida ko'rib chiqiladi.
    • 2 - takrorlash (Qayta takrorlanadigan o'qish, suratga olish) - Ushbu izolyatsiya darajasida faqat belgilangan operatsiyalar ma'lumotlarini o'qish ham mumkin. Bundan tashqari, ushbu darajada "Rad etishdan boshlanmaydigan o'qish", ya'ni bitim doirasida namunada ishtirok etadigan chiziqlar bloklanadi va boshqa parallel bitimlar tomonidan o'zgartirilmaydi. Ammo jadvallar butunlay bloklanmagan. Shu sababli, "xayolot o'qish" muammosi qolmoqda. "Fantom o'qish" - bu bitta bitimni ijro etish paytida bir xil namunalarning natijasi o'zgarishi mumkin, chunki butun stol bloklangan, ammo faqat namunada ishtirok etadigan chiziqlar. Bu shuni anglatadiki, parallel operatsiyalar stolda satrlarni kiritishi mumkin, shuning uchun ikkalasi ma'lumotlarga parallel operatsiyalarni kiritishda boshqa vaqtlarda turli xil natija berishi mumkin.
    • 3 - serializatsiya qilinadigan (Serializizatsiya qilinadigan) - serializizatsiya qilinadigan tranzaksiyalar. Bitim izolyatsiyasining eng ishonchli darajasi, ammo shu bilan birga eng sekin. Ushbu darajada parallel operatsiyalar hech qanday muammo bo'lmaydi, ammo bu uchun tizim tezligini to'lashi kerak va ko'p holatlarda tezlik juda muhimdir.

    Odatiy bo'lib, № 2 izolyatsiyasi darajasi MySQL-da o'rnatiladi (takrorlanadi). O'ylaymanki, MySQL ishlab chiquvchilar behuda ishlamadilar, chunki bu ko'p holatlar uchun eng muvaffaqiyatli bo'lgan. Birinchi marta, eng yaxshi variantning eng yaxshi varianti eng ishonchli, ammo amalda siz arizangizning juda sekin ishlashi sababli katta noqulaylik tug'dirishi mumkin. Shuni yodda tutingki, ko'p narsa ma'lumotlar bazasida bitimlar bazasida izolyatsiya qilish darajasi qanday va sizning arizangiz qanday ishlab chiqilganligi haqida bog'liq emas. Minnatdorchilik dasturlari bilan siz bitim izolyatoridan eng past darajasini ishlatishingiz mumkin - bu sizning arizangizni ishlab chiqishning tuzilishi va savodxonligi xususiyatlariga bog'liq. Ammo izolyatsiyaning eng past darajasiga intilish kerak emas - yo'q, agar siz eng xavfsiz rejimdan foydalansangiz, siz parallel operatsiyalar muammolarini eslab qolishingiz kerak, bu holda siz chalkashib ketmaysiz va hamma narsani to'g'ri bajarmaysiz.

    To'lovni o'rnatish - Ushbu operator keyingi sessiya uchun keyingi bitimni izolyatsiya qilish darajasini belgilaydi.

    • Bitim izolyatsiya darajasini belgilang
      (Ishlamagan holda o'qilgan | o'qilgan | o'qilgan | takrorlanadigan o'qish | Serialistik)

    Mavjud birikmalar ta'sir qilmaydi. Ushbu operatorni bajarish uchun siz juda katta imtiyozga ega bo'lishingiz kerak. Sessiya kalit so'zini qo'llash kelajakdagi barcha operatsiyalarning standart darajasini belgilaydi.

    Siz shuningdek, Mysqld serveri uchun dastlabki global izolyatsiya darajasini-sarf-ajratish variantini o'rnatishingiz mumkin.