MySQL Udfør syre -transaktioner og referentiel integritet

Enhver applikation, der indeholder en database, skal overholde ACID -egenskaber, i applikationerne og professionelle databaseadministratorer refererer ACID -konceptet til de egenskaber eller egenskaber, der garanterer, at transaktionerne i databaserne udføres sikkert og pålidelige. ACID står specifikt for atomitet, konsistens, isolation og holdbarhed.

En transaktion i en database er f.eks. At indsætte en post eller, hvis vi ser det som en forretningsmodel, tilføje ny kunde, ændre produkt. Transaktioner producerer altid en ændring, indsæt, rediger, slet, en forespørgsel er ikke en transaktion, da den ikke producerer ændringer.
Angivelse af syreegenskaber

Atomicitet


Det er ejendommen, der garanterer og verificerer, om transaktionen blev udført eller ej, og denne egenskab angiver, at hvis en handling ikke udføres fuldstændig, så annulleres den, for eksempel antager, at vi indsætter en post, og serveren går ned, en post er registreret i midten, så på grund af atomicitet vil denne rekord ikke blive registreret.
Et andet eksempel, hvis der foretages en online betaling, og beløbet trækkes fra vores konto, men betalingen mislykkes, eller systemet går ned, så afbrydes transaktionen, og databasen registrerer det ikke.

Konsistens


Det er ejendommen, der garanterer, at transaktioner, der kan afsluttes uden problemer, vil blive udført. Dette koncept har at gøre med databasens integritet. Det forhindrer data i at blive ændret og miste mening eller være uden reference, for eksempel kan en kunde ikke slettes, mens de har foretaget et køb på et eller andet tidspunkt. Hvis du vil slette kunden, skal du først slette alle fakturaer og data relateret til den pågældende kunde.

Isolation


Det er ejendommen, der garanterer, at hvis to eller flere transaktioner forekommer på samme tid, vil de blive udført den ene efter den anden, og hvis de udføres parallelt, vil hver enkelt gøre det uafhængigt af den anden for at undgå mulige fejl.

Holdbarhed


Det er ejendommen, der er ansvarlig for at garantere, at en transaktion er foretaget, og de ændringer, transaktionen foretager, er permanente, selv i tilfælde af problemer såsom mangel på elektricitet eller systemfejl.
MySQL understøtter InnoDB -formatet, som er en form for datalagring for MySQL, inkluderet som et standardtabelformat i alle MySQL -distributioner. Dette format understøtter ACID -type transaktioner og referenceel integritet.
Vi skal lave nogle eksempler på ACID -implementering med Mysql, forespørgslerne kan derefter implementeres i ethvert programmeringssprog. I denne database vil hver bruger have et niveau af privilegier og handlinger, som de kan udføre i virksomhedens system. Vi vil kun fokusere på den funktionalitet.
Vi starter med at oprette en database FirmaDB fra phpmyadmin, så skal vi oprette en brugertabel og vælge InnoDB -lagermotoren.

 - Tabelstruktur for bord `brugere` OPRET TABEL IF NOT EXISTS` brugere` (` userid` int (10) NOT NULL, `name` varchar (150) DEFAULT NULL) MOTOR = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1;
Vi tilføjer nogle data til brugernes tabel
 INSERT INTO `users` (` userid`, `name`) VÆRDIER (1, 'Carlos Alberte'), (2, 'Pablo Callejos'), (3, 'Ana Bolena');
I dette tilfælde opretter vi den primære nøgle i brugerens tabel, som vil være userid
 - Indekser over tabellen `brugere` ALTER TABLE` brugere` TILFØJ PRIMÆR NØGLE (` userid`);
Dernæst opretter vi niveautabellen
 - Tabelstruktur for tabel `niveauer` OPRET TABEL IF NOT EXISTS` niveauer` (` levelid` int (11) NOT NULL, `level` varchar (50) DEFAULT NULL) MOTOR = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1;
Vi tilføjer nogle data til niveautabellen
 INSERT INTO `levels` (` levelid`, `level`) VÆRDIER (1, 'Basic'), (2, 'Intermediate'), (3, 'Advanced');
Vi opretter derefter privilegietabellen, hvor vi angiver tilladelsesniveauet for hver bruger
 - Tabelstruktur for tabel `privilegier` OPRET TABEL 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 tilføjer nogle data til privilegietabellen
 INSERT INTO `privileges` (` privilegeid`, `levelid`,` userid`) VÆRDIER (1, 1, 1), (2, 2, 3), (3, 1, 2);
Vi tilføjer derefter relationerne fra SQL -editoren, jeg tildeler en fremmed nøgle, der relaterer privilegierne og brugertabellen gennem bruger -id og den udenlandske nøgle, der relaterer privilegier med niveauer gennem niveau -id.
 - Filtre til tabellen `privilegier` ALTER TABLE` privilegier` ADD CONSTRAINT` levellfk` FOREIGN KEY (`levelid`) REFERENCES` levels` (` levelid`), ADD CONSTRAINT `privilegesfk` FOREIGN KEY (` userid`) REFERENCES `brugere `(` userid`);
Dernæst konsulterer vi databasen for at se, om dataene er korrekte
 VÆLG user.name, levels.level FRA brugere, levels, privilegies WHERE privileges.idlevel = levels.levelid ANDusers.userid = privileges.userid

Lad os se, hvordan det fungerer næste gang, vi prøver at indsætte rettighederne til en bruger og et niveau, der ikke findes.
Erklæringen vil være følgende INSERT INTO privileges VALUES (privilegeid, userid, levelid); Dermed
 SÆT IN I privilegier VÆRDIER (6, 8,10);

Dette giver en fejl, da den udenlandske nøgle til userid i privilegietabellen ville skabe en inkonsekvens, hvis vi tilføjer en bruger, der ikke findes i brugerens tabel, her undgår vi fejlen, med formatet MySam dataene ville være blevet gemt uden problemer.
Dernæst vil vi prøve at slette en bruger fra tabellen med brugere:
 SLET FRA `brugere` HVOR userid = 3
Ved udførelse af SQL -sætningen vil det give os en fejl, fordi klienten ikke kan slettes, fordi den har data i andre tabeller, i dette tilfælde er klienten med id 3 i privilegietabellen, hvis vi vil slette den, skal vi først fjerne den fra alle borde og efter kundebordet.

For at slette denne type poster med udenlandske nøgler bruges den, der hedder delete, i VANDFALD, hvor alle poster relateret til en bestemt forespørgsel vil blive slettet i alle tabellerne, hvor de har udenlandske nøglerelationer. For at udføre denne transaktion bruger vi funktionen PÅ SLET CASCADE.
Den første ting vil være at give tilladelse til at slette i kaskade, husk at når referencetypen starter som standard, er den BEGRÆNSE hvilket indikerer, at dataene i dette felt i tabellen ikke kan opdateres eller slettes, dette er af sikkerhedsmæssige årsager, enhver sætning, der udføres, vil ikke være i stand til at udføre nogen transaktion, så vi ændrer tilladelserne til ændring og sletning.
 ALTER TABLE `privilegier` ADD CONSTRAINT` privilegesfk` Udenlandske nøgle (` userid`) REFERENCES` brugere` (`userid`) TIL SLET CASCADE PÅ OPDATER CASCADE;
Vi udfører SQL -forespørgslen igen
 SLET FRA `brugere` HVOR userid = 3
Derefter kan vi udføre sql -forespørgslen for at kontrollere, at den ikke længere findes i nogen tabel:
 VÆLG user.name, levels.level FRA brugere, levels, privilegies WHERE privileges.idlevel = levels.idlevel OG users.userid = privileges.userid

Bruger 3 er også blevet fjernet fra brugertabellen og fra privilegietabellen, da userid havde en fremmed nøgle der.
Dette er det samme for opdateringer, når det ændres, det kan kaskades for at opretholde referentiel integritet i Mysql og forholdet mellem tabeller.
Lad os se, hvad der sker, hvis vi tilføjer forkerte data i kædeindsatsen, f.eks. Tilføjer vi en bruger, men når vi tilføjer privilegium, får vi det forkerte id
 INSERT INTO users VALUES (5, 'Julia Montaña'); INSERT INTO privileges (`privilegeid`,` levelid`, `userid`) VÆRDIER (6, 2, 6);
I dette tilfælde vil brugeren blive gemt, men ikke deres privilegier, fordi ID 6 ikke findes i brugerens tabel.Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave