MySQL Izvodi ACID transakcije i referentni integritet

Svaka aplikacija koja uključuje bazu podataka mora biti u skladu s ACID karakteristikama, u aplikacijama i profesionalnim upraviteljima baza podataka ACID koncept se odnosi na karakteristike ili svojstva koja jamče da se transakcije u bazama podataka izvode sigurno i povjerljivo. Konkretno, ACID označava atomskost, dosljednost, izolaciju i trajnost.

Transakcija unutar baze podataka je, na primjer, umetanje zapisa ili, ako to vidimo kao poslovni model, dodavanje novog korisnika, izmjena proizvoda. Transakcije uvijek proizvode promjenu, umetanje, izmjenu, brisanje, upit nije transakcija jer ne proizvodi promjene.
Određivanje svojstava ACID -a

Valentnost


Svojstvo je to koje jamči i provjerava je li transakcija izvršena ili ne, a to svojstvo ukazuje na to da ako se operacija ne izvrši do kraja onda se otkazuje, na primjer pretpostavimo da ubacujemo zapis i poslužitelj se ruši, zapis je zabilježen u sredini, tada se zbog atomskosti ovaj zapis neće zabilježiti.
Još jedan primjer ako se vrši internetsko plaćanje i iznos se oduzima s našeg računa, ali plaćanje ne uspije ili se sustav sruši, tada se transakcija otkazuje i baza podataka to ne bilježi.

Dosljednost


To je svojstvo koje jamči da će se transakcije koje se mogu završiti bez problema izvršiti. Ovaj koncept ima veze s integritetom baze podataka. Sprječava da se podaci promijene, izgube smisao ili ostanu bez ikakvih referenci, na primjer, kupca se ne može izbrisati dok je u neko vrijeme obavio kupnju. Ako želite izbrisati korisnika, najprije morate izbrisati sve račune i podatke koji se odnose na tog korisnika.

Izolacija


Svojstvo je ono koje jamči da će se, ako se dvije ili više transakcija dogodi istovremeno, izvršiti jedna za drugom, a ako se izvode paralelno, svaka će to učiniti neovisno jedna o drugoj kako bi se izbjegle moguće pogreške.

Izdržljivost


Vlasništvo je odgovorno za jamstvo izvršene transakcije, a promjene izvršene transakcijom su trajne, čak i u slučaju bilo kakvih problema poput nedostatka električne energije ili kvara sustava.
MySQL podržava InnoDB format, koji je oblik pohrane podataka za MySQL, uključen kao standardni format tablice u sve MySQL distribucije. Ovaj format podržava transakcije tipa ACID i referentni integritet.
Napravit ćemo neke primjere implementacije ACID -a s Mysqlom, upiti bi se tada mogli implementirati u bilo koji programski jezik. U ovoj bazi podataka svaki će korisnik imati razinu privilegija i radnji koje može izvršiti u sustavu tvrtke. Usredotočit ćemo se samo na tu funkcionalnost.
Počet ćemo stvaranjem baze podataka CompanyDB iz phpmyadmina, tada ćemo stvoriti tablicu korisnika i odabrati InnoDB mehanizam za pohranu.

 - Struktura tablice za tablicu `users` CREATE TABLE IF NOT EXSTS` users` (` userid` int (10) NOT NULL, `name` varchar (150) DEFAULT NULL) MOTOR = InnoDB AUTO_INCREMENT = 4 ZADNJA KARTA = latin1;
Dodamo neke podatke u tablicu korisnika
 INSERT INTO `users` (` userid`, `name`) VRIJEDNOSTI (1, 'Carlos Alberte'), (2, 'Pablo Callejos'), (3, 'Ana Bolena');
U ovom slučaju stvaramo primarni ključ tablice korisnika koji će biti korisnički ID
 - Indeksi tablice `users` ALTER TABLE` users` DODAJ PRIMARNI KLJUČ (` userid`);
Zatim ćemo stvoriti tablicu razina
 - Struktura tablice za tablice `razine` CREATE TABLE IF NOT EXSTS` razine` (` levelid` int (11) NOT NULL, `level` varchar (50) DEFAULT NULL) MOTOR = InnoDB AUTO_INCREMENT = 4 ZADNJA KARTA = latin1;
Dodamo neke podatke u tablicu razina
 INSERT INTO `levels` (` levelid`, `level`) VRIJEDNOSTI (1, 'Osnovno'), (2, 'Srednje'), (3, 'Napredno');
Zatim stvaramo tablicu privilegija, gdje ćemo naznačiti razinu dopuštenja svakog korisnika
 - Struktura tablice za tablice `privileges` CREATE TABLE IF NOT EXISTS` privilegije` (` idprivilege` int (11) NOT NULL, `idlevel` int (11) NOT NULL DEFAULT '0',` idusuario` int (11) NOT NULL ) MOTOR = InnoDB AUTO_INCREMENT = 4 ZNAČAJNE KARTE = latin1;
Dodamo neke podatke u tablicu privilegija
 UMETI `privilegije` (` privilegeid`, `levelid`,` userid`) VRIJEDNOSTI (1, 1, 1), (2, 2, 3), (3, 1, 2);
Zatim dodajemo odnose iz uređivača SQL -a, dodjeljujem strani ključ koji povezuje privilegije i tablicu korisnika kroz korisnički ID i strani ključ koji povezuje privilegije s razinama kroz ID razine.
 - Filtri za tablicu `privileges` ALTER TABLE` privilegije` ADD CONSTRAINT` levellfk` STRANI KLJUČ (`levelid`) REFERENCE` razine` (`levelid`), DODAJ OGRANIČENJE` privilegesfk` STRANI KLJUČI (`userid`) REFERENCE` `(` userid`);
Zatim pregledavamo bazu podataka da vidimo jesu li podaci točni
 SELECT users.name, levels.level OD korisnika, razina, privilegija GDJE privileges.idlevel = levels.levelid ANDusers.userid = privileges.userid

Pogledajmo kako to dalje funkcionira. Pokušavamo umetnuti privilegije korisniku i razini koja ne postoji.
Izjava će biti sljedeća INSERT INTO privilegije VALUES (privilegeid, userid, levelid); Tako
 UMETI VRIJEDNOSTI privilegija (6, 8,10);

To daje pogrešku jer bi strani ključ korisničkog ID -a u tablici privilegija stvorio nedosljednost ako dodamo korisnika koji ne postoji u tablici korisnika, ovdje izbjegavamo pogrešku, s formatom MySam podaci bi se bez problema spremili.
Zatim ćemo pokušati izbrisati korisnika iz tablice korisnika:
 IZBRIŠI IZ `korisnika` GDJE je korisnički ID = 3
Prilikom izvršavanja SQL izraza pojavit će se pogreška, jer se klijent ne može izbrisati jer ima podatke u drugim tablicama, u ovom slučaju klijent s ID -om 3 je u tablici privilegija, ako ga želimo izbrisati, prvo ga moramo ukloniti sa svih stolova i za stolom kupaca.

Za brisanje ove vrste zapisa sa stranim ključevima koristi se onaj koji se zove delete SLAP, u kojem će se svi zapisi koji se odnose na određeni upit izbrisati u svim tablicama gdje imaju odnose stranih ključeva. Za izvršavanje ove transakcije koristimo funkciju NA IZBRIŠI CASCADE.
Prvo će biti dopušteno kaskadno brisanje, imajte na umu da je pri pokretanju prema zadanim postavkama referentna vrsta OGRANIČITI što ukazuje na to da se podaci u tom polju tablice ne mogu ažurirati ili izbrisati, to je iz sigurnosnih razloga, bilo koja rečenica koja se izvrši neće moći izvršiti nijednu transakciju, pa mijenjamo dopuštenja za izmjenu i brisanje.
 ALTER TABELA `privileges` ADD CONSTRAINT` privilegesfk` FOREIGN KEY (` userid`) REFERENCE` users` (`userid`) ON DELETE CASCADE ON UPDATE CASCADE;
Ponovno izvodimo SQL upit
 IZBRIŠI IZ `korisnika` GDJE je korisnički ID = 3
Zatim možemo izvesti sql upit kako bismo provjerili da ga više nema ni u jednoj tablici:
 SELECT users.name, levels.level OD korisnika, razina, privilegija GDJE privileges.idlevel = levels.idlevel I users.userid = privileges.userid

Korisnik 3 je uklonjen iz tablice korisnika i tablice privilegija, budući da je korisnički ID tamo imao strani ključ.
To je isto za ažuriranja pri mijenjanju, može se kaskadirati radi održavanja referentnog integriteta u Mysqlu i odnosa između tablica.
Pogledajmo što će se dogoditi ako dodamo netočne podatke u umetanje lanca, na primjer dodamo korisnika, ali kad dodamo privilegiju, dobit ćemo pogrešan ID
 UMJETAJ VRIJEDNOSTI korisnika (5, 'Julia Montaña'); INSERT INTO privilegije (`privilegeid`,` levelid`, `userid`) VRIJEDNOSTI (6, 2, 6);
U tom će slučaju korisnik biti spremljen, ali ne i njegove privilegije jer ID 6 ne postoji u tablici korisnika.Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod
wave wave wave wave wave