DML utasítások és tranzakciókezelés
Tranzakciókezelés
DML utasítások sorozata, mely egy logikai egységet alkotLegkisebb egység, mely lényege, hogy csak együtt mehetnek végbe, vagy mind végbe megy vagy egyik sem. EGYként léteznek.Pl.: Ha pénzt utalok valaki számlájára akkor az én számlámon a pénz csökken( UPDATE) az adott összeggel, míg akinek utalok azé nő (UPDATE). Fontos, hogy a kettő csak egyszerre mehessen végbe különben lehetne, hogy a pénz csak az én számlámról tűnik el de nem érkezik meg a másik számlára, ami számomra nem lenne túl jó, viszont fordítva meg a bank számára nem lenne előnyös.(előadás)A tranzakció elejét és végét a programozói jelölik ki, fontos a jó kezdet és vég meghatározás.
COMMIT
Tranzakció véglegesítésekor használjuk a COMMIT utasítást.A tranzakció által okozott módosításokat átvezeti az adatbázisba és láthatóvá teszi azokat más munkamenetek számára, felold minden – a tranzakció működése közben elhelyezett – zárat és törli a mentési pontokat.Forrás:http://www.tankonyvtar.hu/hu/tartalom/tamop425/0046_plsql_programozas/ch05s06.html
ahttps://www.youtube.com/watch?v=3XPgQFvVWpo
ROLLBACK
Ha meggondoltuk magunkat akkor a folyamatban lévő tranzakciót a ROLLBACK utasítással állíthatjuk le.ROLLBACK után a tranzakció által elvégzett módosítás elveszik, a régi értékek visszaállnak és a zárak felszabadulnak.A TO utasításrésszel rendelkező ROLLBACK a megadott mentési pontig görgeti vissza a tranzakciót, a megadott mentési pont érvényben marad, az azt követők törlődnek, a mentési pont után elhelyezett zárak feloldásra kerülnek és a tranzakció a megadott mentési ponttól folytatódik.Forrás:http://www.tankonyvtar.hu/hu/tartalom/tamop425/0046_plsql_programozas/ch05s06.html
ahttps://www.youtube.com/watch?v=aH95qWaJUJo
SAVEPOINT
A SAVEPOINT utasítással mentési pontokat hozhatunk létre, mely a tranzakciók részleges visszagörgetését szolgálják.SAVEPOINT mentésipont;Több SAVEPOINTot is el tudunk helyezni a tranzakcióban és amikor vissza szeretnénk görgetni, akkor ROLLBACK TO (SAVEPOINT) mentésipont ;utasítással tehetjük meg.Példa:Számítógépes játékokban is vannak ilyen mentési pontok egy szinten belül, hogy ne kelljen az adott szintet elölről kezdeni.Forráshttp://www.tankonyvtar.hu/hu/tartalom/tamop425/0046_plsql_programozas/ch05s06.html
ahttps://www.youtube.com/watch?v=cjXhU3CTugw
DML utasítások
DML = Data Manipulation Language ( adatmódosító utasítások)Ezen utasítások a meglévő táblák adatait módosítják.DML utasítások:- INSERT- DELETE-UPDATE-MERGE-SELECTBár a SELECT a DDL utasítások közé tartozok sokan mégis ide sorolják.Alapvetően csak egy sort tudunk mindig módosítani azonban a SELECT utasítással ki tudunk jelölni/választani több sort egyszerre és úgy módosítani, s ez a SQL egyik legnagyobb előnye, hogy ezáltal gyorsabban lehet kezelni nagy mennyiségű adatokat.Az adatbázis kezelésénél legtöbbször DDL utasításokat használnak.Források:http://www.orafaq.com/faq/what_are_the_difference_between_ddl_dml_and_dcl_commands
aINSERT
INSERT utasítással sorokat szúrhatunk be a (meglévő) táblába.INSERT INTO táblaneve [(oszlopneve,..)]VALUES (beszúrandóérték);ha a tábla összes oszlopába szeretnék beszúrni értékeket, akkor elegendő a táblanevét megadniha viszont csak egyes oszlopokba szeretnék értéket beszúrni, akkor szükséges az oszlopok neveinek megadásaFONTOS, hogy a oszlopokba beszúrandó értékek adattípusának meg kell egyeznie az oszlop adattípusával. Pl.: születési éveket tartalmazó oszlopba nem szúrhatunk be szövegetCsak egy sort tudunk beszúrni ha csak a INSERT INTO utasítást használjuk.PéldaHallgatók táblához adjunk hozzá egy új hallgatótINSERT INTO Hallgatók (neptun, név, szülév)VALUES ( 'ABC123','Gipsz Jakab', 1993);Hasznos linkek/Forrásokhttps://docs.oracle.com/cd/B14117_01/appdev.101/b10807/13_elems025.htmhttp://www.rebellionrider.com/sql-insert-into/how-to-insert-data-using-sql-insert.htm#.WLBJL_nhDIVhttps://www.youtube.com/watch?v=uQXgqFtxI_k&t=323s
aNULL érték
Sokak szerint hiba volt megengedni a NULL értéket mivel sok hiba keletkezik általa.FONTOS, hogy a NULL érték nem egyenlő a zérussal.Kétféleképpen lehet NULL értéket beszúrni.-Implicit-Explicit
Implicit
Implicit: amelyik oszlopba azt szeretnék, hogy NULL érték kerüljön azt kihagyjuk az oszloplistábólINSERT INTO Állatok(név, súly, szülév)VALUES ('Berta', 10, 2015); Ezáltal minden más oszlopban (amit nem írtunk bele) NULL értéket fog beszúrni.FONTOS, hogy azokat az oszlopokat amelyekben nem engedélyezett a NULL érték (pl.:primary key) ne hagyjuk ki, mivel akkor hibát fog kiírni.
Explicit
Explicit: NULL kulcsszót használunk a VALUES klauzulábanINSERT INTO ÁllatokVALUES ('Berta, 10, 2015, NULL, NULL, NULL)FONTOS : az értékek számának meg kell egyeznie az oszlopok számával
SELECT
Ha INSERT utasítást egy SELECT allekérdezéssel használjuk, akkor több sort is be tudunk egyszerre szúrni.INSERT INTO táblanév SELECT oszlopnév FROM táblanév [WHERE feltétel ]; Ilyenkor elhagyjuk a VALUES klauzulát.Az INSERT klauzula oszlopainak számának meg kell egyeznie az allekérdezés oszlopainak számával.Példa:Illesszük be azokat a hallgatókat az ösztöndíjasok táblába akiknek az átlaga 3,5 felett vanINSERT INTO Ösztöndíjasok SELECT * FROM Hallgatók WHERE átlag > 3,5 ;
DELETE
A táblák meglévő sorait tudjuk kitörölni.Ki tudunk törölni olyan sorokat, amik benne vannak egy másik táblában illetve olyanokat amik nincsenek benne egy másik táblában.DELETE FROM táblanévWHERE feltétel;Ha a táblának van gyerek táblája, vagyis külső kulccsal össze vannak kötve, akkor nem lehet kitörölni a szülő táblát.A ROLL BACK utasítással vissza lehet állítani az adatokat a törlés előtti állapotba.Forrás:http://www.inczedy.hu/~szikszai/adatbazis/sql1.pdfhttps://www.youtube.com/watch?v=Cue47QnOf_I&t=110s
aNOT IN
Ha NOT IN segítségével azokat töröljük ki akik nincsenek az adott táblában, azonban a NOT IN nem mükődik ha van NULL érték a halmazban!PéldaTöröljük azokat a diákokat, akik nem buktak meg.DELETE FROM DiákokWHERE neptun NOT IN (SELECT neptun FROM Eredmények WHERE eredmény = 'elégtelen' );
UPDATE
Update utasítással meglévő sorok értékeit tudjuk módosítani.UPDATE táblanévSET oszlop = érték[WHERE feltétel]PéldaMegváltozott egy ügyfél azonosítója. Módosítsuk az ügyfelek táblában.UPDATE ÜgyfelekSET azonosító = 45WHERE név = 'Gipsz Jakab';Forrás/hasznos link:https://www.techonthenet.com/sql/update.phphttps://www.youtube.com/watch?v=ABB1DR13bNk&t=251s
aSELECT
SELECT allekérdezéssel egyszerre tetszőleges számú sor is módosítható.UPDATE táblanévSET oszlopnév = ( SELECT oszlopnév FROM táblanév ) WHERE feltétel ;
Korrelált UPDATE
Egy SELECT utasítás úgy van beágyva az UPDATE utasításba, hogy a belső SELECT az őt körülvevő UPDATE utasítás oszlopaira hivatkozik.A külső UPDATE által érintett minden sorra lefut a belső SELECT. Példa: Adott az alábbi 3 tábla (és oszlopaik nevei) CSAPOLJA (Kocsma, Sör) SZERETI (Név, Sör) ODAJÁR (Név, Kocsma)Válasszuk ki azokat akik járnak olyan kocsmába, ahol olyan sört csapolnak, amit szeretnek.SELECT DISTINCT Szereti.Név FROM Szereti, Csapolja WHERE Szereti.Sör=Csapolja.Sör AND Csapolja.Kocsma IN ( SELECT Odajár.Kocsma FROM Odajár WHERE Odajár.Név=Szereti.Név)Forrás:http://vassanyi.ginf.hu/ab/SQL/rovidSQL.htm
aMERGE
A MERGE utasítás a többszörös INSERT és DELETE utasítások elkerülésére való.
ACID
ACID = savasság Egy adatbázistól elvárt képességek halmaza
Atomicity
Atomosság:A tranzakció a feldolgozás atomi egysége; vagy teljes egészében végrehajtódik, vagy egyáltalán nem.Forrás.http://shrek.unideb.hu/~nogre/AdatB/Elmelet/13.pdf
aConsistency
Konzisztenciamegőrzés:Egy tranzakció konzisztenciamegőrző, ha teljes végrehajtása az adatbázist konzisztens állapotból konzisztens állapotba viszi át.Forrás:http://shrek.unideb.hu/~nogre/AdatB/Elmelet/13.pdf
aIsolation
Izoláció/Elkülönítés: Egy tranzakciónak látszólag más tranzakcióktól elkülönítve kell végrehajtódnia. Ez azt jelenti, hogy a tranzakció végrehajtása nem állhat kölcsönhatásban semelyik másik konkurensen végrehajtott tranzakcióval sem.Forrás:http://shrek.unideb.hu/~nogre/AdatB/Elmelet/13.pdf
aIzolációs szintek
Read Uncommited
Read Commited
Serializable
Repeatable Read
Durability
Tartósság:Egy véglegesített tranzakció által az adatbázison véghezvitt módosításoknak meg kell őrződniük az adatbázisban. Ezeknek a módosításoknak semmilyen hiba miatt nem szabad elveszniük.Forrás:http://shrek.unideb.hu/~nogre/AdatB/Elmelet/13.pdf
aDDL
DDL = Data Definition Language (adatdefiníciós utasítások)Amelyek objektumok (táblák) létrehozására, módosítására és törlésére valók.(Tábla szerkezetének módosítása)DDL utasítások:-CREATE-DROP-TRUNCATE-COMMENT-RENAME-(SELECT)Forrás:http://tanulnijo.uw.hu/adatbazis/ab_kilencedik.htmlhttp://www.orafaq.com/faq/what_are_the_difference_between_ddl_dml_and_dcl_commands
aTRUNCATE
TRUNCATE egy DDL utasítás,mely minden sort kitöröl az adott táblában.TRUNCATE táblanév;A DELETE-hez képest gyorsabb és nem használ annyi helyet.Azonban nem lehet ROLL BACK utasítással visszaállítani az általa kitörölt adatokat.Forrás:http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands
a