Categorías: Todo - adatbázis

por Zsófia Szombati hace 7 años

370

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

Az adatbázis-nyelvek különböző utasításokat tartalmaznak, amelyek célja az adatok hatékony kezelése és manipulálása. Az adatdefiníciós nyelv (DDL) a táblák létrehozására, módosítására és törlésére szolgál.

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

DDL

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.html

http://www.orafaq.com/faq/what_are_the_difference_between_ddl_dml_and_dcl_commands

TRUNCATE

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

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

ACID

ACID = savasság

Egy adatbázistól elvárt képességek halmaza

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

Isolation

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

Izolációs szintek

Repeatable Read

Serializable

Read Commited

Read Uncommited

Consistency

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

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

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

-SELECT


Bá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

MERGE

A MERGE utasítás a többszörös INSERT és DELETE utasítások elkerülésére való.


UPDATE

Update utasítással meglévő sorok értékeit tudjuk módosítani.


UPDATE táblanév

SET oszlop = érték

[WHERE feltétel]


Példa

Megváltozott egy ügyfél azonosítója. Módosítsuk az ügyfelek táblában.


UPDATE Ügyfelek

SET azonosító = 45

WHERE név = 'Gipsz Jakab';


Forrás/hasznos link:

https://www.techonthenet.com/sql/update.php

https://www.youtube.com/watch?v=ABB1DR13bNk&t=251s

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

SELECT allekérdezéssel egyszerre tetszőleges számú sor is módosítható.


UPDATE táblanév

SET oszlopnév = ( SELECT oszlopnév

FROM táblanév )

WHERE feltétel ;


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év

WHERE 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.pdf

https://www.youtube.com/watch?v=Cue47QnOf_I&t=110s

NOT 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élda

Töröljük azokat a diákokat, akik nem buktak meg.


DELETE FROM Diákok

WHERE neptun NOT IN (SELECT neptun FROM Eredmények WHERE eredmény = 'elégtelen' );

INSERT

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 megadni


ha viszont csak egyes oszlopokba szeretnék értéket beszúrni, akkor szükséges az oszlopok neveinek megadása


FONTOS, 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öveget

Csak egy sort tudunk beszúrni ha csak a INSERT INTO utasítást használjuk.


Példa

Hallgatók táblához adjunk hozzá egy új hallgatót


INSERT INTO Hallgatók (neptun, név, szülév)

VALUES ( 'ABC123','Gipsz Jakab', 1993);





Hasznos linkek/Források

https://docs.oracle.com/cd/B14117_01/appdev.101/b10807/13_elems025.htm

http://www.rebellionrider.com/sql-insert-into/how-to-insert-data-using-sql-insert.htm#.WLBJL_nhDIV

https://www.youtube.com/watch?v=uQXgqFtxI_k&t=323s

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 van


INSERT INTO Ösztöndíjasok

SELECT *

FROM Hallgatók

WHERE átlag > 3,5 ;

NULL é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



Explicit

Explicit: NULL kulcsszót használunk a VALUES klauzulában


INSERT INTO Állatok

VALUES ('Berta, 10, 2015, NULL, NULL, NULL)


FONTOS : az értékek számának meg kell egyeznie az oszlopok számával


Implicit

Implicit: amelyik oszlopba azt szeretnék, hogy NULL érték kerüljön azt kihagyjuk az oszloplistából


INSERT 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.


Tranzakciókezelés

DML utasítások sorozata, mely egy logikai egységet alkot


Legkisebb 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.

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ás

http://www.tankonyvtar.hu/hu/tartalom/tamop425/0046_plsql_programozas/ch05s06.html

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


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