作者:Máté Kondor 7 年以前
355
更多类似内容
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
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
Forrás: előadás
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
Forrás: Előadás
Elosztott adatbázisokon nehéz ezt az atomicitást biztosítani. Egy two phase commit nevű algoritmus valósítja meg.
Tranzakciók időbeli folyamata
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
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
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
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
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
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
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.
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
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
Ha egy tranzakciót véglegesíteni akarunk, akkor a COMMIT utasítással tudjuk megtenni.
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
A tábla meglévő sorait tudjuk az utasítással törölni.
Szintaxis:
DELETE FROM table_name
WHERE some_column=some_value;
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
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
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
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
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.
Az INSERT utasítás sorok beszúrására alkalmas a már meglévő táblába.
[ ] 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.
Az INSERT utasításnál kétféleképpen adhatjuk meg a NULL értéket.
A NULL kulcsszót használjuk a VALUES klauzulában.
Azokat az oszlopokat kihagyjuk a listából, amelyekbe NULL kell, hogy kerüljön.