„MySQL“ atlieka ACID operacijas ir nurodo vientisumą

Bet kuri programa, kurioje yra duomenų bazė, turi atitikti ACID charakteristikas, o programose ir profesionaliuose duomenų bazių valdytojuose ACID sąvoka reiškia charakteristikas ar savybes, kurios garantuoja, kad operacijos duomenų bazėse bus vykdomos saugiai ir patikimai. Konkrečiai ACID reiškia atomiškumą, nuoseklumą, izoliaciją ir ilgaamžiškumą.

Sandoris duomenų bazėje yra, pavyzdžiui, įrašo įterpimas arba, jei matome jį kaip verslo modelį, pridėkite naują klientą, pakeiskite produktą. Sandoriai visada pakeičia, įterpia, modifikuoja, ištrina, užklausa nėra sandoris, nes ji neatneša pakeitimų.
ACID savybių nurodymas

Atomiškumas


Tai yra nuosavybė, kuri garantuoja ir patikrina, ar operacija buvo atlikta, ar ne, ir ši savybė rodo, kad jei operacija nėra atlikta visiškai, ji yra atšaukiama, pavyzdžiui, tarkime, kad įterpiame įrašą ir serveris užstringa, įrašas įrašomas viduryje, tada dėl atomiškumo šis įrašas nebus įrašytas.
Kitas pavyzdys, jei mokėjimas atliekamas internetu ir suma yra išskaičiuojama iš mūsų sąskaitos, tačiau mokėjimas nepavyksta arba sistema sugenda, tada sandoris atšaukiamas ir duomenų bazė jo neįrašo.

Nuoseklumas


Tai nuosavybė, garantuojanti, kad sandoriai, kurie gali būti užbaigti be problemų, bus įvykdyti. Ši sąvoka yra susijusi su duomenų bazės vientisumu. Tai neleidžia keisti duomenų ir prarasti prasmės arba būti be jokios nuorodos, pavyzdžiui, kliento negalima ištrinti, kai jis ką nors pirko. Jei norite ištrinti klientą, pirmiausia turite ištrinti visas su tuo klientu susijusias sąskaitas faktūras ir duomenis.

Isolation


Tai yra savybė, garantuojanti, kad tuo pačiu metu įvykus dviem ar daugiau sandorių, jie bus įvykdyti vienas po kito, o jei jie bus vykdomi lygiagrečiai, kiekvienas tai padarys nepriklausomai nuo kito, kad išvengtų galimų klaidų.

Patvarumas


Būtent turtas yra atsakingas už tai, kad sandoris būtų atliktas, o sandorio atlikti pakeitimai yra nuolatiniai, net jei kiltų kokių nors problemų, tokių kaip elektros energijos trūkumas ar sistemos gedimai.
„MySQL“ palaiko „InnoDB“ formatą, kuris yra „MySQL“ duomenų saugojimo forma, įtraukta į standartinį lentelės formatą visuose „MySQL“ paskirstymuose. Šis formatas palaiko ACID tipo operacijas ir referencinį vientisumą.
Mes atliksime keletą ACID diegimo pavyzdžių su „Mysql“, tada užklausos galėtų būti įgyvendintos bet kuria programavimo kalba. Šioje duomenų bazėje kiekvienas vartotojas turės privilegijų ir veiksmų, kuriuos jie gali atlikti įmonės sistemoje, lygį. Mes sutelksime dėmesį tik į šį funkcionalumą.
Pradėsime nuo duomenų bazės sukūrimo ĮmonėDB iš phpmyadmin, tada mes sukursime vartotojų lentelę ir pasirinksime „InnoDB“ saugojimo variklį.

 - Lentelės „vartotojams“ lentelės struktūra CREATE TABLE IF NOT EXISTS (vartotojai) int (10) NOT NULL, „name“ varchar (150) DEFAULT NULL) VARIKLIS = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1;
Į vartotojų lentelę įtraukiame kai kuriuos duomenis
 INSERT INTO "users" ("userid", "name") VERTYBĖS (1, 'Carlos Alberte'), (2, 'Pablo Callejos'), (3, 'Ana Bolena');
Tokiu atveju sukuriame pirminį vartotojų lentelės raktą, kuris bus userid
 - Lentelės "vartotojai" ALTER TABLE "vartotojai" PRIDĖTI PAGRINDINĮ RAKTĄ ("userid") indeksai;
Toliau sukursime lygių lentelę
 - Lentelės „lygiai“ lentelės struktūra CREATE TABLE IF NOT EXISTS` lygiai “(„ levelid “int (11) NOT NULL,„ level “varchar (50) DEFAULT NULL) VARIKLIS =„ InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1 “;
Į lygių lentelę įtraukiame kai kuriuos duomenis
 INSERT INTO "lygiai" ("levelid", "level") VERTYBĖS (1, "Basic"), (2, "Intermediate"), (3, "Advanced");
Tada sukuriame privilegijų lentelę, kurioje nurodysime kiekvieno vartotojo teisių lygį
 - Lentelės „privilegijos“ lentelės struktūra CREATE TABLE IF NOT EXISTTS ) VARIKLIS = „InnoDB AUTO_INCREMENT“ = 4 Numatytosios CHARSET = latin1;
Pridedame tam tikrus duomenis prie privilegijų lentelės
 INSERT INTO "privilegijos" ("privilegeid", "levelid", "userid") VERTĖS (1, 1, 1), (2, 2, 3), (3, 1, 2);
Tada pridedame ryšius iš SQL redaktoriaus, aš priskiriu užsienio raktą, kuris susieja privilegijų ir vartotojų lentelę per vartotojo ID, ir užsienio raktą, kuris susieja privilegijas su lygiais per lygio ID.
 - Lentelės „privilegijos“ ALTER TABLE privilegijų filtrai „ADD CONSTRAINT“ levellfk "(" vartotojo ID ");
Toliau mes kreipiamės į duomenų bazę, kad pamatytume, ar duomenys teisingi
 PASIRINKITE vartotojus.pavardis, lygiai.levelis IŠ vartotojų, lygių, privilegijų WHERE privilegijos.leibis = lygiai.levelidas ANDusers.userid = privilegijos.userid

Pažiūrėkime, kaip tai veikia toliau, bandome įterpti privilegijas neegzistuojančiam vartotojui ir lygiui.
Pareiškimas bus toks INSERT INTO privilegijos VALUES (privilegeid, userid, levelid); Taigi
 INSERT INTO privilegijos VERTĖS (6, 8,10);

Tai sukelia klaidą, nes svetimas „userid“ raktas privilegijų lentelėje sukeltų nenuoseklumą, jei pridėtume naudotoją, kurio vartotojų lentelėje nėra, čia išvengsime klaidos su formatu MySam duomenys būtų išsaugoti be problemų.
Toliau bandysime ištrinti vartotoją iš vartotojų lentelės:
 Ištrinti iš „naudotojų“, kur userid = 3
Vykdant SQL sakinį, mums atsiras klaida, nes kliento negalima ištrinti, nes jis turi duomenų kitose lentelėse, tokiu atveju klientas su ID 3 yra privilegijų lentelėje, jei norime jį ištrinti, pirmiausia turime jį pašalinti nuo visų stalų ir po kliento stalo.

Norint ištrinti tokio tipo įrašus naudojant užsienio raktus, naudojamas įrašas, vadinamas „delete“ VANDENIS, kurioje visi įrašai, susiję su konkrečia užklausa, bus ištrinti visose lentelėse, kuriose jie turi užsienio raktų ryšius. Norėdami atlikti šią operaciją, naudojame funkciją Ištrinti kaskadą.
Pirmiausia turėsite duoti leidimą ištrinti kaskadoje, nepamirškite, kad pradžia pagal numatytuosius nustatymus yra nuorodos tipas RIBOTI o tai rodo, kad toje lentelės srityje esančių duomenų negalima atnaujinti ar ištrinti, taip yra saugumo sumetimais, bet koks įvykdytas sakinys negalės atlikti jokios operacijos, todėl keičiame leidimus keisti ir ištrinti.
 ALTER TABLE "privilegijos" ADD CONSTRAINT "privilegijosfk" UŽSIENIO RAKTAS ("userid") REFERENCES "vartotojai" ("userid") IŠTRINANT KASKADĄ ATNAUJINANT KASKADĄ;
Dar kartą atliekame SQL užklausą
 Ištrinti iš „naudotojų“, kur userid = 3
Tada galime atlikti SQL užklausą ir patikrinti, ar jos nebėra jokioje lentelėje:
 PASIRINKITE vartotojus.pavardis, lygiai.levelis IŠ vartotojų, lygių, privilegijų WHERE privilegijos.leibis = lygmenys.pakopas IR vartotojai.userid = privilegijos.userid

3 vartotojas buvo pašalintas iš vartotojų lentelės ir privilegijų lentelės, nes naudotojo ID ten turėjo svetimą raktą.
Tas pats taikoma ir atnaujinimams modifikuojant, jis gali būti pakopuotas, kad būtų išlaikytas „Mysql“ referencinis vientisumas ir ryšys tarp lentelių.
Pažiūrėkime, kas atsitiks, jei pridėsime neteisingus duomenis į grandinės intarpą, pavyzdžiui, pridėsime vartotoją, tačiau pridėję privilegiją gausime neteisingą ID
 INSERT INTO users VALUES (5, „Julia Montaña“); INSERT INTO privilegijos (`privilegeid`,` levelid`, `userid`) VERTĖS (6, 2, 6);
Tokiu atveju vartotojas bus išsaugotas, bet ne jo privilegijos, nes vartotojų lentelėje nėra 6 ID.Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką
wave wave wave wave wave