Innholdsfortegnelse
Enhver applikasjon som inkluderer en database må overholde ACID -egenskaper, i applikasjonene og profesjonelle databaseadministratorer refererer ACID -konseptet til egenskapene eller egenskapene som garanterer at transaksjonene i databasene utføres trygt og pålitelig. Spesielt står ACID for atomitet, konsistens, isolasjon og holdbarhet.En transaksjon i en database er for eksempel å sette inn en post eller, hvis vi ser det som en forretningsmodell, legge til ny kunde, endre produkt. Transaksjoner gir alltid en endring, setter inn, endrer, sletter, en spørring er ikke en transaksjon siden den ikke gir endringer.
Spesifiserer syreegenskaper
Atomisitet
Det er eiendommen som garanterer og bekrefter om transaksjonen ble utført eller ikke, og denne egenskapen indikerer at hvis en operasjon ikke er fullført, blir den kansellert, for eksempel anta at vi setter inn en post og serveren krasjer, en post er spilt inn i midten, og på grunn av atomisitet vil denne posten ikke bli spilt inn.
Et annet eksempel hvis en online betaling foretas og beløpet trekkes fra kontoen vår, men betalingen mislykkes eller systemet krasjer, blir transaksjonen kansellert og databasen registrerer den ikke.
Konsistens
Det er eiendommen som garanterer at transaksjoner som kan fullføres uten problemer vil bli utført. Dette konseptet har å gjøre med databasens integritet. Det forhindrer at data blir endret og mister mening eller er uten referanse, for eksempel kan en kunde ikke slettes mens de har gjort et kjøp på et tidspunkt. Hvis du vil slette kunden, må du først slette alle fakturaene og dataene knyttet til den kunden.
Isolering
Det er eiendommen som garanterer at hvis to eller flere transaksjoner skjer samtidig, vil de bli utført en etter en, og hvis de blir utført parallelt, vil hver enkelt gjøre det uavhengig av den andre for å unngå mulige feil.
Varighet
Det er eiendommen som er ansvarlig for å garantere at en transaksjon er utført, og endringene som er gjort av transaksjonen er permanente, selv i tilfelle problemer som mangel på elektrisitet eller systemfeil.
MySQL støtter InnoDB -formatet, som er en form for datalagring for MySQL, inkludert som et standard tabellformat i alle MySQL -distribusjoner. Dette formatet støtter transaksjoner av typen ACID og referanseintegritet.
Vi skal gjøre noen eksempler på ACID -implementering med Mysql. Forespørslene kan deretter implementeres på ethvert programmeringsspråk. I denne databasen vil hver bruker ha et nivå av privilegier og handlinger som de kan utføre i selskapets system. Vi vil bare fokusere på den funksjonaliteten.
Vi starter med å lage en database Selskap DB fra phpmyadmin, så skal vi lage et brukerbord og velge InnoDB lagringsmotor.
- Tabellstruktur for tabell `brukere` SKAP TABELL IF NOT EXISTS` brukere` (` userid` int (10) NOT NULL, `name` varchar (150) DEFAULT NULL) MOTOR = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1;Vi legger til noen data i brukerbordet
INSERT INTO `users` (` userid`, `name`) VERDIER (1, 'Carlos Alberte'), (2, 'Pablo Callejos'), (3, 'Ana Bolena');I dette tilfellet oppretter vi hovednøkkelen til brukertabellen som vil være userid
- Indekser for tabellen `brukere` ALTER TABLE` brukere` ADD PRIMARY KEY (` userid`);Deretter lager vi nivåetabellen
- Tabellstruktur for tabell `nivåer` SKAP TABELL HVIS IKKE FESTER` nivåer` (` levelid` int (11) NOT NULL, `level` varchar (50) DEFAULT NULL) MOTOR = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1;Vi legger til noen data i nivåtabellen
SETT INN i `nivåer` (` levelid`, `level`) VERDIER (1, 'Basic'), (2, 'Intermediate'), (3, 'Advanced');Vi lager deretter privilegietabellen, hvor vi vil angi tillatelsesnivået for hver bruker
- Tabellstruktur for tabellen `privilegier` SKAP TABELL IF NOT EXISTS` privilegier` (` idprivilege` int (11) NOT NULL, `idlevel` int (11) NOT NULL DEFAULT '0',` idusuario` int (11) NOT NULL ) MOTOR = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1;Vi legger til noen data i privilegietabellen
SETT INN i `privilegier` (` privilegeid`, `levelid`,` userid`) VERDIER (1, 1, 1), (2, 2, 3), (3, 1, 2);Vi legger deretter til relasjonene fra SQL -editoren, jeg tildeler en fremmed nøkkel som relaterer privilegier og brukertabell gjennom bruker -ID og den utenlandske nøkkelen som relaterer privilegier med nivåer gjennom nivå -ID.
- Filtre for tabellen `privilegier` ALTER TABLE` privilegier` ADD CONSTRAINT` levellfk` FOREIGN KEY (`levelid`) REFERENCES` levels` (`levelid`), ADD CONSTRAINT` privilegesfk` FOREIGN KEY (`userid`) REFERENCES` brukere `(` userid`);Deretter konsulterer vi databasen for å se om dataene er riktige
VELG brukere.navn, nivåer.nivå FRA brukere, nivåer, privilegier HVOR privileges.idlevel = levels.levelid ANDusers.userid = privileges.useridLa oss se hvordan det fungerer neste gang vi prøver å sette inn rettighetene til en bruker og nivå som ikke eksisterer.
Erklæringen vil være følgende INSERT INTO privileges VALUES (privilegeid, userid, levelid); Og dermed
SETT INN i privilegier VERDIER (6, 8,10);Dette gir en feil siden den fremmede nøkkelen til userid i privilegietabellen ville skape en inkonsekvens hvis vi legger til en bruker som ikke eksisterer i brukertabellen, her unngår vi feilen, med formatet MySam dataene ville blitt lagret uten problemer.
Deretter vil vi prøve å slette en bruker fra tabellen for brukere:
SLETT FRA `brukere` WHERE userid = 3Når du utfører SQL -setningen, vil det gi oss en feil, fordi klienten ikke kan slettes fordi den har data i andre tabeller i dette tilfellet, klienten med id 3 er i privilegietabellen, hvis vi vil slette den må vi først fjerne den fra alle bord og etter kundebordet.
For å slette denne typen poster med utenlandske nøkler, brukes den som heter delete FOSS, der alle postene knyttet til en bestemt spørring vil bli slettet i alle tabellene der de har utenlandske nøkkelforhold. For å utføre denne transaksjonen bruker vi funksjonen PÅ SLETT CASCADE.
Det første vil være å gi tillatelse til å slette i kaskade, husk at når du starter som standard er referansetypen BEGRENSE som indikerer at dataene i dette feltet i tabellen ikke kan oppdateres eller slettes, dette er av sikkerhetsmessige årsaker, en setning som blir utført vil ikke kunne utføre noen transaksjon, så vi endrer tillatelsene for endring og sletting.
ALTER TABLE `privilegies` ADD CONSTRAINT` privilegesfk` ERLAND NØKKEL (` userid`) REFERENCES` users` (`userid`) PÅ SLETT KASKADE PÅ OPPDATER CASCADE;Vi utfører SQL -spørringen igjen
SLETT FRA `brukere` WHERE userid = 3Deretter kan vi utføre sql -spørringen for å bekrefte at den ikke lenger er i noen tabell:
VELG brukere.navn, nivåer.nivå FRA brukere, nivåer, privilegier HVOR privileges.idlevel = levels.idlevel OG users.userid = privileges.useridBruker 3 er også fjernet fra brukerbordet og fra privilegietabellen siden bruker -ID -en hadde en fremmed nøkkel der.
Dette er det samme for oppdateringer ved endring, det kan kaskades for å opprettholde referanseintegritet i Mysql og forholdet mellom tabeller.
La oss se hva som skjer hvis vi legger til feil data i kjedeinnsatsen, for eksempel legger vi til en bruker, men når vi legger til privilegium får vi feil ID
INSERT INTO users VALUES (5, 'Julia Montaña'); SETT INN i privilegier (`privilegeid`,` levelid`, `userid`) VERDIER (6, 2, 6);I dette tilfellet vil brukeren bli lagret, men ikke sine privilegier, fordi ID 6 ikke finnes i brukertabellen.Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng