によって Zsófia Szombati 7年前.
360
もっと見る
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 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
ACID = savasság
Egy adatbázistól elvárt képességek halmaza
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
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
Repeatable Read
Serializable
Read Commited
Read Uncommited
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
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 = 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
A MERGE utasítás a többszörös INSERT és DELETE utasítások elkerülésére való.
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
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 ;
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
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 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
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 ;
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.
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.
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
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
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