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.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.userid
Erklæringen vil være følgende INSERT INTO privileges VALUES (privilegeid, userid, levelid); Og dermed
SETT INN i privilegier VERDIER (6, 8,10);
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.
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.userid
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