Satura rādītājs
Jebkurai lietojumprogrammai, kas ietver datubāzi, jāatbilst ACID raksturlielumiem, lietojumprogrammās un profesionālos datu bāzes pārvaldniekos ACID jēdziens attiecas uz īpašībām vai īpašībām, kas garantē, ka darījumi datu bāzēs tiek veikti droši un uzticami. Konkrēti ACID apzīmē atomu, konsekvenci, izolāciju un izturību.ACID rekvizītu norādīšana
Atomitāte
Tas ir īpašums, kas garantē un pārbauda, vai darījums tika veikts vai nē, un šis īpašums norāda, ka, ja darbība netiek veikta pilnībā, tā tiek atcelta, piemēram, pieņemsim, ka mēs ievietojam ierakstu un serveris avarē, ieraksts tiek ierakstīts vidū, tad atomu dēļ šis ieraksts netiks ierakstīts.
Vēl viens piemērs, ja tiek veikts tiešsaistes maksājums un summa tiek atskaitīta no mūsu konta, bet maksājums neizdodas vai sistēma avarē, tad darījums tiek atcelts un datu bāze to neieraksta.
Konsekvence
Tas ir īpašums, kas garantē, ka tiks izpildīti darījumi, kurus var pabeigt bez problēmām. Šī koncepcija ir saistīta ar datu bāzes integritāti. Tas neļauj mainīt datus un zaudēt nozīmi vai būt bez atsauces, piemēram, klientu nevar izdzēst, kamēr viņš ir veicis pirkumu. Ja vēlaties dzēst klientu, vispirms ir jāizdzēš visi ar šo klientu saistītie rēķini un dati.
Izolācija
Tas ir īpašums, kas garantē, ka, ja divi vai vairāki darījumi notiek vienlaicīgi, tie tiks izpildīti viens pēc otra, un, ja tie tiek izpildīti paralēli, katrs to darīs neatkarīgi no otra, lai izvairītos no iespējamām kļūdām.
Izturība
Īpašums ir atbildīgs par darījuma garantēšanu, un darījuma veiktās izmaiņas ir neatgriezeniskas, pat ja rodas kāda problēma, piemēram, elektrības trūkums vai sistēmas kļūmes.
MySQL atbalsta InnoDB formātu, kas ir MySQL datu glabāšanas veids, kas iekļauts kā standarta tabulas formāts visos MySQL izplatījumos. Šis formāts atbalsta ACID tipa darījumus un atsauces integritāti.
Mēs veiksim dažus ACID ieviešanas piemērus ar Mysql, pēc tam vaicājumus varētu īstenot jebkurā programmēšanas valodā. Šajā datu bāzē katram lietotājam būs privilēģiju un darbību līmenis, ko viņi var veikt uzņēmuma sistēmā. Mēs koncentrēsimies tikai uz šo funkcionalitāti.
Sāksim ar datu bāzes izveidi UzņēmumsDB no phpmyadmin, tad mēs izveidosim lietotāju tabulu un atlasīsim InnoDB uzglabāšanas dzinēju.
- Tabulas struktūra lietotājiem "CREATE TABLE IF NOT EXISTS" ("userid" int (10) NOT NULL, "name" varchar (150) DEFAULT NULL) ENGINE = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1;Mēs pievienojam dažus datus lietotāju tabulai
INSERT INTO "users" ("userid", "name") VALUES (1, 'Carlos Alberte'), (2, 'Pablo Callejos'), (3, 'Ana Bolena');Šajā gadījumā mēs izveidojam lietotāju tabulas primāro atslēgu, kas būs userid
- tabulas indeksi "lietotāji" ALTER TABLE "lietotāji" PIEVIENOT PRIMĀRO ATSLĒGU ("userid");Tālāk mēs izveidosim līmeņu tabulu
- Tabulas struktūra līmeņiem "CREATE TABLE IF NOT NOTISTS" ("levelid" int (11) NOT NULL, "level" varchar (50) DEFAULT NULL) DZINĒJS = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1;Mēs pievienojam dažus datus līmeņu tabulai
INSERT INTO "līmeņi" ("levelid", "level") VĒRTĪBAS (1, "Basic"), (2, "Intermediate"), (3, "Advanced");Pēc tam mēs izveidojam privilēģiju tabulu, kurā mēs norādīsim katra lietotāja atļauju līmeni
- Tabulas struktūra privilēģijām CREATE TABLE IF NOT EXISTTS ) DZINĒJS = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latīņu1;Mēs pievienojam dažus datus privilēģiju tabulai
INSERT INTO "privilēģijas" ("privilegeid", "levelid", "userid") VĒRTĪBAS (1, 1, 1), (2, 2, 3), (3, 1, 2);Pēc tam mēs pievienojam attiecības no SQL redaktora, es piešķiru svešu atslēgu, kas saistīs privilēģiju un lietotāju tabulu, izmantojot lietotāja ID, un ārējo atslēgu, kas saistīs privilēģijas ar līmeņiem līdz līmenim id.
- Filtri tabulai "privilēģijas" ALTER TABLE "privilēģijas" PIEVIENOT KONSTRUKCIJU "levellfk" FOREIGN KEY ("levelid") REFERENCES "līmeņi" ("levelid"), ADD CONSTRAINT "privilegesfk" FOREIGN KEY ("userid") REFERENCES "lietotāji "(" lietotāja ID ");Tālāk mēs apskatām datu bāzi, lai noskaidrotu, vai dati ir pareizi
SELECT users.name, levels.level FROM lietotāji, līmeņi, privilēģijas WHERE privileges.idlevel = levels.levelid ANDusers.userid = privileges.userid
Paziņojums būs šāds INSERT INTO privilēģijas VĒRTĪBAS (privilegeid, userid, levelid); Tādējādi
INSERT INTO privilēģijas VĒRTĪBAS (6, 8,10);
Tālāk mēs mēģināsim izdzēst lietotāju no lietotāju tabulas:
DELETE FROM `users` WHERE userid = 3Izpildot SQL paziņojumu, tas mums parādīs kļūdu, jo klientu nevar izdzēst, jo tam ir dati citās tabulās, šajā gadījumā klients ar ID 3 atrodas privilēģiju tabulā, ja mēs vēlamies to izdzēst, tas vispirms ir jānoņem no visām tabulām un pēc klienta galda.
Pirmā lieta būs atļaut dzēšanu kaskādē, atcerieties, ka, sākot ar noklusējumu, atsauces veids ir IEROBEŽOT kas norāda, ka datus šajā tabulas laukā nevar atjaunināt vai izdzēst, tas ir drošības apsvērumu dēļ, jebkurš izpildīts teikums nevarēs veikt nekādus darījumus, tāpēc mēs mainām modificēšanas un dzēšanas atļaujas.
ALTER TABLE "privilēģijas" PIEVIENOT KONSTRUKCIJU "privilegesfk" FOREIGN KEY ("userid") REFERENCES "lietotāji" ("userid") IZSLĒGT KASKĀDI ATJAUNINĀT KASKĀDI;Mēs vēlreiz veicam SQL vaicājumu
DELETE FROM `users` WHERE userid = 3Tad mēs varam veikt SQL vaicājumu, lai pārbaudītu, vai tas vairs nav nevienā tabulā:
SELECT users.name, levels.level FROM lietotāji, līmeņi, privilēģijas WHERE privileges.idlevel = levels.idlevel UN users.userid = privileges.userid
Tas pats attiecas uz atjauninājumiem, veicot izmaiņas, to var kaskādēt, lai saglabātu atsauces integritāti Mysql un attiecības starp tabulām.
Paskatīsimies, kas notiks, ja ķēdes ieliktnī pievienosim nepareizus datus, piemēram, pievienosim lietotāju, bet, pievienojot privilēģijas, tiks iegūts nepareizs ID
INSERT INTO users VALUES (5, 'Julia Montaña'); INSERT INTO privilēģijas (`privilegeid`,` levelid`, `userid`) VĒRTĪBAS (6, 2, 6);Šajā gadījumā lietotājs tiks saglabāts, bet ne viņa privilēģijas, jo lietotāju tabulā nav 6. ID.Vai jums patika šī apmācība un palīdzējāt tai?Jūs varat apbalvot autoru, nospiežot šo pogu, lai sniegtu viņam pozitīvu punktu