Sadržaj
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.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
Izjava će biti sljedeća INSERT INTO privilegije VALUES (privilegeid, userid, levelid); Tako
UMETI VRIJEDNOSTI privilegija (6, 8,10);
Zatim ćemo pokušati izbrisati korisnika iz tablice korisnika:
IZBRIŠI IZ `korisnika` GDJE je korisnički ID = 3Prilikom 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.
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 = 3Zatim 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
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