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

DML utasítások

r

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

NULL érték beszúrása

r

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

Implicit módon

Implicit módon

r

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

Explicit módon

Explicit módon

r

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

INSERT utasítás

r

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

Forrás: Előadás

Forrás: Előadás

r

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

r

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

Forrás: Előadás

Forrás: Előadás

INSERT SELECT

INSERT SELECT Példa

INSERT SELECT Példa

r

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.

UPDATE utasítás

r

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_nameSET  column1=value1,column2=value2,...WHERE  some_column=some_value;Forrás: https://www.w3schools.com/sql/sql_update.asp

Korrelált UPDATE

Korrelált UPDATE

r

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

Tetszőleges számú sorra

Tetszőleges számú sorra

r

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

DELETE utasítás

r

A tábla meglévő sorait tudjuk az utasítással törölni. Szintaxis:DELETE FROM table_nameWHERE some_column=some_value;

Allekérdezés DELETE-ben

Allekérdezés DELETE-ben

r

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

Gyakorlati példa

Gyakorlati példa

A learning séma

Tranzakció

r

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.

COMMIT

r

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

ROLLBACK

r

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

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

SAVEPOINT

r

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

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

Adatbáziskezelő ACID tulajdonsága

r

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

Atomicity

r

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

Consistency

r

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

a

Isolation

r

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

a

Izolációs szintek

Serializable

r

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

Read Comitted

r

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

Read Uncomitted

Repeatable Read

r

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

Durability

r

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

r

Learning séma: létrehozására azért volt szükség, hogy több feladatot tudjunk végrehajtani a meglévő táblákkal. A táblákat az SQL developerben tudjuk megnézni. A két legfontosabb tábla a Customers és az Order tábla, az órán felsorolt DML utasításokat ezeken hajtjuk vége. (Forrás: előadás)

a
Forrás: előadás

Forrás: előadás

r

Tranzakciók időbeli folyamata

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

r

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

COMMIT után

r

Az adatok módosítása véglegessé válik az adatbázisban. Ilyenkor már nem lehet visszacsinálni.A tranzakció által végzett módosítások előtti értékek már nem visszaállíthatóak.Minden munkamenet látja az új értékeket. Az eddig lefoglalt helyek felszabadulnak.A tranzakció során esetleg elhelyezett mentési pontok (SAVEPOINT) elvesznek.Forrás: Előadás

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

r

Elosztott adatbázisokon nehéz ezt az atomicitást biztosítani. Egy two phase commit nevű algoritmus valósítja meg.Prepare FázisCommit fázis Utána elfelejthető részletek(forget fázis)

ROLLBACK után

r

A tranzakció során elvégzett minden módosítás elveszik. Ekkor a régi értékek visszaállnak.A zárak(lefoglalások) felszabadulnak.Forrás: előadás

Forrás: Előadás

Forrás: Előadás

Utasítás szintű ROLLBACK

r

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

Olvasási konzisztencia

r

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: Aki csupán (SELECT), az nem vár mások folyamatban lévő tranzakcióiraAki módosít, nem vár azokra, akik csak módosítanakAki módosít, vár azokra, akik módosítják ugyanazon adatokatAz 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