Kategorier: Alle - adatbázis

af Máté Kondor 7 år siden

378

Sample Mind Map

Az SQL nyelvezetben az ACID tulajdonságok biztosítják a tranzakciók megbízhatóságát és következetességét. Az ACID rövidítés az atomosságot, konzisztenciát, izolációt és tartósságot jelöli.

Sample Mind Map

Olvasási konzisztencia

Az adatbázis kezelő azon működési módja, amely biztosítja azt, hogy aki olvassa az adatokat az ne láthassa mások befejezetlen tranzakcióit. Az implementációja rendkívül nehezen megvalósítható.

Oracle esetén:

Az ORACLE a tranzakciókezelést és az olvasási konzisztenciát lock-ok és úgynevezett UNDO adatok vezetésével valósítja meg.

Forrás: Előadás

Adatok értéke a ROLLBACK vagy a COMMIT előtt

Az adatok tranzakció előtti állapotát még mindig vissza lehet állítani a ROLLBACK utasítással.

A munkamenet amelyben folyamatban van a tranzakció, az a SELECT utasításaiban látja a tranzakció során addig végrehajtott összes változtatást.

A többi munkamenet ekkor még nem látja a folyamatban lévő tranzakció által végzett módosításokat.

A folyamatban lévő tranzakció által módosított sorok le vannak zárva(foglalva). Más tranzakciók nem módosíthatják ezeket a sorokat mindaddig, amíg a folyamatban lévő tranzakció be nem fejeződik.

Forrás: Előadás

ROLLBACK után

Forrás: előadás

Utasítás szintű ROLLBACK

Ha egyetlen DML művelet végrehajtása során hibára fut, akkor annak az egy utasításnak az összes változtatása mindenestül visszavonásra kerül. A tranzakció során előzőleg végrehajtott módosítások megmaradnak.

Ha mégis a hiba miatt be kéne fejezni a teljes tranzakciót, akkor azt a felhasználónak magának kell kezdeményeznie. (COMMIT vagy ROLLBACK utasítással)

Forrás: Előadás

COMMIT után

Forrás: Előadás

Kétfázisú jóváhagyás

Elosztott adatbázisokon nehéz ezt az atomicitást biztosítani. Egy two phase commit nevű algoritmus valósítja meg.

Forrás: előadás

Tranzakciók időbeli folyamata


DML utasítások és tranzakció kezelés

Adatbáziskezelő ACID tulajdonsága

Az ACID(savasság) az SQL nyelvezetben azt jelenti, hogy melyek azok a képességek, amelyeket az adatbázistól elvárunk.

Forrás: Előadás


Durability

A végrehajtott tranzakciók változtatásait egy tartós adattárolón kell tárolni, hogy a szoftver vagy a hardver meghibásodása, áramszünet, vagy egyéb hiba esetén is megmaradjon.

Forrás:

http://aries.ektf.hu/~dream/e107/e107_files/downloads/naplozas.pdf

Isolation

A tranzakciók izolációja azt biztosítja, hogy az egy időben zajló tranzakciók olyan állapothoz vezetnek, mint amilyet sorban végrehajtott tranzakciók érnének el. Egy végrehajtás alatt álló tranzakció hatásai nem láthatóak a többi tranzakcióból.

Forrás:

http://aries.ektf.hu/~dream/e107/e107_files/downloads/naplozas.pdf

Izolációs szintek

Repeatable Read

Ismételhető olvashatóság. Minden visszaolvasásra ugyan annyi lesz az adatok értéke. Ez azt jelenti, hogy közben más nem tud változtatni az adatokon. A gyakorlatban ez nem jelenik meg, mert a többfelhasználós rendszert teljesen megbénítja.

Forrás: Előadás

Read Uncomitted

Read Comitted

Ami már jóvá van hagyva, azt másik is láthatják, ami még nincs azt pedig mások még nem láthatják.

Forrás: Előadás

Serializable

Sorbarendezhetőség. Pl: 10 egyidőben futó tranzakció együttesen ad majd egy eredményt, akkor sorbarendezhető egy rendszer, ha képes vagyok kiválasztani ennek a 10 tranzakciónak egy olyan sorrendjét, amelynek a végén pont ugyanolyan eredmény születik ha egymás után(seriálisan) hajtottam volna végre. Elég ha egyetlen egy ilyen sorrend létezik, akkor már sorbarendezhető. A későbbiekben a tranzakciók könnyen visszeelemezhetőek lesznek. Jelentősen lelassítja az adatbáziskezelő rendszert.

Forrás: Előadás

Consistency

A konzisztencia biztosítja, hogy az adatok a tranzakció előtti érvényes állapotból ismét egy érvényes állapotba kerüljenek. Minden erre vonatkozó szabálynak (hivatkozási integritás, adatbázis triggerek stb.) érvényesülnie kell.

Forrás:

http://aries.ektf.hu/~dream/e107/e107_files/downloads/naplozas.pdf

Atomicity

Atomicitás: Az atomicitás megköveteli, hogy több műveletet atomi (oszthatatlan) műveletként lehessen végrehajtani, azaz vagy az összes művelet sikeresen végrehajtódik, vagy egyik sem.

Forrás:

http://aries.ektf.hu/~dream/e107/e107_files/downloads/naplozas.pdf





Tranzakció

A tranzakció DML utasítások egy sorozata, amely az adatmódosításaink egy logikai egysége. Ezeket a változtatásokat (módosításokat) egységként vagy érvényesítjük a végén, vagy mindenestül visszavonjuk. Például: ha egy banki ügyintéző átutalást kezdeményez egy ügyfél részére, akkor az ügyfél részéről egy UPDATE utasítással leveszi a pénzt és egy másik UPDATE utasítással a kívánt bankszámla egyenlegét növeli, ezt nevezzük egy logikai egységnek és ezt szeretném jóváhagyni a későbbiekben, ez a COMMIT utasítással fog történni, így a tranzakció sikeresen létre jön. Amennyiben az ügyfél meggondolja magát és nem szeretné végrehajtani az utalást, akkor a tranzakciót teljes egészében vissza kell vonni.

A fejlesztő(programozó) felelőssége az, hogy pontosan megfelelő egységekbe(tranzakciókba) csoportosítsa a DML műveleteket.

SAVEPOINT

Egyes adatbázis kezelőknél a tranzakciók során elhelyezhetőek olyan pontok, amelyekre opcionálisan vissza lehet térni. Ezeket a potenciális visszatérési pontokat nevezzük SAVEPOINT-oknak.

A pontokra visszatérés módja a ROLLBACK TO SAVEPOINT utasítással történik.


Forrás: Előadás

Példa Forrás: előadás
ROLLBACK

Ha időközben meggondoltuk magunkat és vissza akarjuk csinálni az éppen folyamatban lévő tranzakciókat ezt a ROLLBACK utasítással tudjuk elérni.

Forrás: Előadás

Rollback példa: Forrás előadás
COMMIT

Ha egy tranzakciót véglegesíteni akarunk, akkor a COMMIT utasítással tudjuk megtenni.

A learning séma

DML utasítások

A DML (Data Manipulation Language) a már rendelkezésre álló táblák adatait módosítják. Tehát ezekkel a műveletekkel új sorokat szúrhatunk be a táblába, a táblák meglévő sorait módosítjuk, a táblák meglévő sorait kitörölhetjük. Egyes adatbázis kezelőknél jelen van a MERGE is (SQL Server 2008-tól támogatja, Azure SQL Database). Fontos, hogy nem szerkezetet változtatunk, hanem csak a tartalmat. Például: Polgár Péter lakcíme megváltozik, Budapestről Sopronba költözik és ezt megváltoztatjuk az adatbázisunkban is. Egyes elméleti szakértők a SELECT utasítást is ide sorolják. Forrás: Előadás, https://msdn.microsoft.com/en-us/library/bb510625.aspx

DELETE utasítás

A tábla meglévő sorait tudjuk az utasítással törölni.


Szintaxis:

DELETE FROM table_name

WHERE some_column=some_value;



Gyakorlati példa
Allekérdezés DELETE-ben

Egy DELETE segítségével törölhetőek ki olyan sorok, amelyek megtalálhatóak egy másik táblában, vagy akár fordítva, azok amelyek nem találhatóak egy másikban sem.


Forrás: Előadás

UPDATE utasítás

Az UPDATE utasítás a tábla soraiban, vagy a nézet alaptáblájába esetleg egy materializált nézet soraiban lévő attribútumok értékeit módosítja. Nagyon fontos, hogy meglévő soroknak az értékeit változtatja meg és nem a tábla szerkezetét.

Szintaxis:

UPDATE  table_name

SET  column1=value1,column2=value2,...

WHERE  some_column=some_value;


Forrás: https://www.w3schools.com/sql/sql_update.asp

Tetszőleges számú sorra

Egyszerre tetszőleges számú sor is módosítható.

Előadáson elhangzott példához:

A 206-os számú dolgozót szeretnénk módosítani úgy, hogy a bére és a munkaköre olyan legyen, mint a 205-ös dolgozóé. Ez a műveletet akár több sorra is megadhatnánk, ha több dolgozót jelölnénk ki.

Forrás: Előadás

Korrelált UPDATE

A korrelált UPDATE egy UPDATE utasítás amibe be van ágyazva egy SELECT függvény és ez az utasítás hivatkozik az őt körülvevő SQL utasításra. A működést úgy kell elképzelni, hogy a külső UPDATE által érintett minden sorra lefut a belső SELECT függvény.

A korrelált jelentése az, hogy kívülről befelé kell gondolkoznunk.

Forrás: előadás

INSERT SELECT
INSERT SELECT Példa

Ha az INSERT utasítást egy allekérdezéssel szeretnénk megcsinálni, akkor kell használni a select utasítást. Ekkor nincs szükség a VALUES klauzulára.

A második példa csak arra mutat rá, hogy az INSERT klauzula oszlopainak száma meg kell, hogy egyezzen az allekérdezés oszlopainak számával.

INSERT utasítás

Az INSERT utasítás sorok beszúrására alkalmas a már meglévő táblába.

Forrás: Előadás

[ ] zárójelek csak feltételes elemek, nem biztos, hogy minden esetben használni szeretnénk.

Forrás: https://www.w3schools.com/sql

Láthatjuk, hogy egy új sor került felvételre a táblába, a megadott paramétereknek megfelelően.

NULL érték beszúrása

Az INSERT utasításnál kétféleképpen adhatjuk meg a NULL értéket.

Explicit módon

A NULL kulcsszót használjuk a VALUES klauzulában.

Implicit módon

Azokat az oszlopokat kihagyjuk a listából, amelyekbe NULL kell, hogy kerüljön.