adatbázisok- sql dr. viczián gergely (dr. török jános v2.0)

18
Adatbázisok Adatbázisok - - SQL SQL Dr. Viczián Gergely Dr. Viczián Gergely (Dr. Török János V2.0) (Dr. Török János V2.0)

Upload: perrin

Post on 14-Jan-2016

29 views

Category:

Documents


0 download

DESCRIPTION

Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0). Tartalom. Egy kis adatbázis történelem Relációs Adatbázis-kezelők Mi az SQL? SQL alapjai parancsok lekérdezés lekérdezési terv variációk (Lotus, Access) Adatbiztonság. Az adatbázisok története. „data base” 1963 (~data bank) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

Adatbázisok-Adatbázisok-SQLSQL

Dr. Viczián GergelyDr. Viczián Gergely

(Dr. Török János V2.0)(Dr. Török János V2.0)

Page 2: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

TartalomTartalom

Egy kis adatbázis történelemEgy kis adatbázis történelem Relációs Adatbázis-kezelőkRelációs Adatbázis-kezelők Mi az SQL?Mi az SQL? SQL alapjaiSQL alapjai

parancsokparancsok lekérdezés lekérdezés lekérdezési tervlekérdezési terv variációk (Lotus, Access)variációk (Lotus, Access)

AdatbiztonságAdatbiztonság

Page 3: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

Az adatbázisok történeteAz adatbázisok története

„„data base” 1963 (~data bank)data base” 1963 (~data bank) Charles Bachman – szekv. feldolg. felváltásaCharles Bachman – szekv. feldolg. felváltása 19719700 E. F. Codd 12 szabálya relációs model E. F. Codd 12 szabálya relációs model 1978 Vulcan CP/M (dBASE)1978 Vulcan CP/M (dBASE) 1979 Oracle 21979 Oracle 2 1981 Tate és Lashlee dBASE-II PC assembly1981 Tate és Lashlee dBASE-II PC assembly 1984 dBASE-III (89 / 92 / 99 modosítások)1984 dBASE-III (89 / 92 / 99 modosítások) 1986 SQL ANSI és ISO szabvány lesz1986 SQL ANSI és ISO szabvány lesz XML ~ adatbázis + dokumentumXML ~ adatbázis + dokumentum

Page 4: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

Relációs adatbáziskezelők Relációs adatbáziskezelők „RDBMS”„RDBMS”

Edgar Frank „Tedd” Codd szabályai Edgar Frank „Tedd” Codd szabályai 00.. Reláció kizárólag csak kezelésreReláció kizárólag csak kezelésre

1.1. Az egységes megjelenésű információ szabályaAz egységes megjelenésű információ szabálya2.2. Garantált lokalizálhatóság szabálya Garantált lokalizálhatóság szabálya (tábla, oszlop, sor/kulcs)(tábla, oszlop, sor/kulcs)3.3. A NULL értékek egységes kezelése A NULL értékek egységes kezelése (egységes)(egységes)4.4. A rel. modell alapján aktív online katalógust kell üzemben A rel. modell alapján aktív online katalógust kell üzemben

tartanitartani5.5. A teljeskörű „adatnyelv” szabálya A teljeskörű „adatnyelv” szabálya (lineáris, interaktív, adat)(lineáris, interaktív, adat)6.6. A nézetek frissítésének szabályaA nézetek frissítésének szabálya7.7. Magas szintű beszúrás, frissítés és törlés Magas szintű beszúrás, frissítés és törlés (egyidejű)(egyidejű)8.8. Fizikai szintű adatfüggetlenségFizikai szintű adatfüggetlenség9.9. Logikai szintű adatfüggetlenségLogikai szintű adatfüggetlenség10.10.Jóság (integritás) függetlenség Jóság (integritás) függetlenség (adatkorlát, jóság kezelése)(adatkorlát, jóság kezelése)11.11.Elosztástól való függetlenség Elosztástól való függetlenség (változások, lekérdezések)(változások, lekérdezések)12.12.Megkerülhetetlenség szabálya Megkerülhetetlenség szabálya (alacsony szintű megkerülés)(alacsony szintű megkerülés)

Page 5: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

dBASEdBASE

USE bertabla USE bertabla REPLACE ALL fizetes WITH fizetes * 1.1 FOR vezeto > 0 REPLACE ALL fizetes WITH fizetes * 1.1 FOR vezeto > 0 LIST ALL nev, beosztas, fizetes TO PRINT LIST ALL nev, beosztas, fizetes TO PRINT

Page 6: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

Relációs adatbázisRelációs adatbázis Relációs adatmodell (Codd szabályok) Relációs adatmodell (Codd szabályok)

alapján létrehozott adatbázisalapján létrehozott adatbázisrészei:részei:

Felhasználók, jogosultsági rendszerekFelhasználók, jogosultsági rendszerek TáblákTáblák NézetekNézetek Indexek Indexek (bináris fa)(bináris fa) MegszorításokMegszorítások Eljárások, függvényekEljárások, függvények TriggerekTriggerek

Azonos szerkezetű rekordok:

•táblázat•minden oszlop rögzített

típusú•alap, vagy null érték

Automatikus programok•változások véglegesítése•üres mezők kitöltése•integritás biztosítása•indexek létrehozása

dialektus, más programnyelv

Page 7: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

SQLSQL Structured Query LanguageStructured Query Language Általános leíró nyelv adatbázis elérésére, Általános leíró nyelv adatbázis elérésére,

módosításáramódosítására Relációs adatbázis kezelők elterjedt nyelveRelációs adatbázis kezelők elterjedt nyelve ANSI szabvány…ANSI szabvány… Sokféle programtámogatás:Sokféle programtámogatás:

Visual Basic (MsSQL)Visual Basic (MsSQL) JavaJava PL/SQLPL/SQL ACCESSACCESS php (MySQL)php (MySQL) A dBASE nem SQL!

Page 8: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

SQL hátrányai...SQL hátrányai...

Nem igazi relációs adatbázis modellNem igazi relációs adatbázis modell A szintaxis komplikáltA szintaxis komplikált Sokszor igen hosszú parancsok születnek, Sokszor igen hosszú parancsok születnek,

amelyek nehezen törhetők darabokraamelyek nehezen törhetők darabokra A különböző implementációk kicsit A különböző implementációk kicsit

eltérnek egymástól (pl. Oracle és Access)eltérnek egymástól (pl. Oracle és Access) Ékezetes problémák bizonyos Ékezetes problémák bizonyos

megvalósításokbanmegvalósításokban

Page 9: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

Az SQL alapjai 1.Az SQL alapjai 1. LekérdezésLekérdezés

(CREATE VIEW)(CREATE VIEW) SELECT SELECT

AdatmanipulációAdatmanipuláció UPDATEUPDATE DELETEDELETE INSERT INTOINSERT INTO

AdatleírásAdatleírás CREATE TABLECREATE TABLE ALTER TABLEALTER TABLE DROP TABLEDROP TABLE CREATE INDEXCREATE INDEX DROP INDEXDROP INDEX

Az olvashatóság miatt írjuk nagybetűvel a parancsokat

COMMIT/ROLLBACK

Page 10: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

AZ SQL alapjai 2.AZ SQL alapjai 2. LekérdezésLekérdezésSELECTSELECT [ [any/distinct any/distinct all/distinct/top/distinctrowall/distinct/top/distinctrow] ] { { oszlopokoszlopok } }

[[ASAS alias1, alias2,…] alias1, alias2,…]

FROMFROM táblakifejezés táblakifejezés [,…] [[,…] [ININ külső adatbáziskülső adatbázis]]

[INNER/LEFT/RIGHT JOIN …][INNER/LEFT/RIGHT JOIN …]

[[WHEREWHERE ….] ….]

[[GROUP BYGROUP BY …] …]

[[HAVINGHAVING…]…]

[[ORDER BYORDER BY…]…]

[[WITH OWNERACCESS OPTIONWITH OWNERACCESS OPTION]]

nincs/van ismétlődés

van/nincs ismétlődés/első n/nincs dupla sor

Amire kíváncsiakvagyunk

Megjelenített táblázatfejléccíme

Lehet az oszlopok utánis írni

Táblázat/okCsak ACCESS, avizuális összekapcsolásmiattSzűrési feltétel

Csoportosítás (összeg, átlag)

Csoportosítás utániszűrési feltételAz eredmény rendezését

adja meg

Page 11: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

PéldaPélda

SELECTSELECT Fokonyv_2K4.Sorsz, Fokonyv_2K4.Sorsz, Fokonyv_2K4.Datum, Fokonyv_2K4.Fokonyv_2K4.Datum, Fokonyv_2K4.[Brutto(Tart)], Fokonyv_2K4.[Brutto(Kov)], [Brutto(Tart)], Fokonyv_2K4.[Brutto(Kov)], Fokonyv_2K4.[KP/Bank], Fokonyv_2K4.[KP/Bank],

[Brutto(Tart)]-[Brutto(Kov)] AS akt[Brutto(Tart)]-[Brutto(Kov)] AS akt

FROMFROM Fokonyv_2K4 Fokonyv_2K4

WHEREWHERE (((Fokonyv_2K4.Datum)<=[vegnap])); (((Fokonyv_2K4.Datum)<=[vegnap]));

Page 12: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

Összetettebb példa Összetettebb példa SELECT SQL_CALC_FOUND_ROWS base.actiroleID AS col0, actiID, SELECT SQL_CALC_FOUND_ROWS base.actiroleID AS col0, actiID,

actiName AS col1, actiState AS col3, wbseID, wbseName AS col4, flowID, actiName AS col1, actiState AS col3, wbseID, wbseName AS col4, flowID, flowName AS col6, actiPriority AS col8, atypAbr AS col9, actiID AS col10, flowName AS col6, actiPriority AS col8, atypAbr AS col9, actiID AS col10, IF(ISNULL(actiRealStart) OR actiRealStart='0000-00-IF(ISNULL(actiRealStart) OR actiRealStart='0000-00-00',actiPlannedStart,actiRealStart) AS col11, actiPlannedEnd AS col12, 00',actiPlannedStart,actiRealStart) AS col11, actiPlannedEnd AS col12, IF(ISNULL(actiPlannedEnd) OR actiPlannedEnd='0000-00-IF(ISNULL(actiPlannedEnd) OR actiPlannedEnd='0000-00-00','',IF((ISNULL(actiRealEnd) OR actiRealEnd='0000-00-00') AND 00','',IF((ISNULL(actiRealEnd) OR actiRealEnd='0000-00-00') AND actiPlannedEnd>=CURRENT_DATE,'',TO_DAYS(IF(ISNULL(actiRealEnd) actiPlannedEnd>=CURRENT_DATE,'',TO_DAYS(IF(ISNULL(actiRealEnd) OR actiRealEnd='0000-00-00',CURRENT_DATE,actiRealEnd))-OR actiRealEnd='0000-00-00',CURRENT_DATE,actiRealEnd))-TO_DAYS(actiPlannedEnd))) AS col13 TO_DAYS(actiPlannedEnd))) AS col13

FROM TQactirole as base FROM TQactirole as base left join TQacti AS acti on (actiID=base.actiroleActiID) left join TQacti AS acti on (actiID=base.actiroleActiID) left join TQwbse AS wbse on (wbseID=actiWbseID) left join TQwbse AS wbse on (wbseID=actiWbseID) left join TQflow AS flow on (wbseFlowID=flowID) left join TQflow AS flow on (wbseFlowID=flowID) left join TQatyp AS atyp on (atypID=actiATypID) left join TQatyp AS atyp on (atypID=actiATypID) WHERE actiWbseID>-1 and (flowFCatID<1 or ISNULL(flowFCatID)) AND WHERE actiWbseID>-1 and (flowFCatID<1 or ISNULL(flowFCatID)) AND

(base.actiroleRoleID IN ('22')) AND (ISNULL(actiPlannedEnd) OR (base.actiroleRoleID IN ('22')) AND (ISNULL(actiPlannedEnd) OR actiPlannedEnd<=CURDATE()+INTERVAL 7 DAY) AND (actiState='3' OR actiPlannedEnd<=CURDATE()+INTERVAL 7 DAY) AND (actiState='3' OR (3=3 AND actiState<>2) OR (3=4 AND actiState<>0)) (3=3 AND actiState<>2) OR (3=4 AND actiState<>0))

GROUP BY actiID GROUP BY actiID ORDER BY col12 asc ORDER BY col12 asc LIMIT 0,30 LIMIT 0,30

Page 13: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

Lekérdezési tervLekérdezési terv

A keresés végeredményét általában A keresés végeredményét általában tovább analizáljuktovább analizáljuk

Lekérdezési tervLekérdezési terv A kapott halmazt (eredmények különböző A kapott halmazt (eredmények különböző

táblákból) egy táblákból) egy kurzorkurzor segítségével tudjuk segítségével tudjuk tovább olvasnitovább olvasni

Page 14: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)
Page 15: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

Fontosabb különbségekFontosabb különbségek AdattípusokAdattípusok

NUMERIC-NUMBERNUMERIC-NUMBER DATE DATE Oracle-ben dátum és idő is, máshol Oracle-ben dátum és idő is, máshol

csak dátumcsak dátum időnként van nem sztenderd típus isidőnként van nem sztenderd típus is

Gyors keresésnél néha csak pontos találat Gyors keresésnél néha csak pontos találat lehetséges, míg máshol nemlehetséges, míg máshol nem

Helyettesítések Helyettesítések (%(%_ _ (Oracle) (Oracle) *?#[a-z]*?#[a-z](Access)(Access)))

Programozási kiterjesztésekProgramozási kiterjesztések

Page 16: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

ProgramozásProgramozás

Visual Basic for ACCESSVisual Basic for ACCESS

Sub test()Sub test()

Dim s As StringDim s As String

s=s=”SELECT ….””SELECT ….”

DoCmd.RunSQL DoCmd.RunSQL ss

End SubEnd Sub

Flexibilis lekérdezések formokkal!Flexibilis lekérdezések formokkal!

Page 17: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

PHPPHP@ $db = mysql_pconnect('localhost', 'root', '');@ $db = mysql_pconnect('localhost', 'root', '');

if (!$db)if (!$db){{ echo 'Nem konnektál!';echo 'Nem konnektál!';

exit;exit;}}mysql_select_db('gergo');mysql_select_db('gergo');$q = "SELECT tartuser.userid as uid, tartuser.nev, sum( tartitem.osszeg ) $q = "SELECT tartuser.userid as uid, tartuser.nev, sum( tartitem.osszeg )

as ossz , max( tartitem.datum ) as utolso"as ossz , max( tartitem.datum ) as utolso"." FROM tartuser, tartitem"." FROM tartuser, tartitem"." WHERE tartitem.userid = tartuser.userid"." WHERE tartitem.userid = tartuser.userid"." GROUP BY tartitem.userid"." GROUP BY tartitem.userid"." ORDER BY ossz desc";." ORDER BY ossz desc";

$res = mysql_query($q);$res = mysql_query($q);$n = mysql_num_rows($res);$n = mysql_num_rows($res);$ossz=0;$ossz=0;echo '<table border=1>'; echo '<table border=1>';

echo ‘<tr><td>Név</td>';echo ‘<tr><td>Név</td>';echo '<td>Tart</td>';echo '<td>Tart</td>';echo '<td>Utsó</td>'; echo '<td>Utsó</td>'; echo '</tr>';echo '</tr>';

for ($i=0;$i<$n; $i++) {for ($i=0;$i<$n; $i++) {$row = mysql_fetch_array($res);$row = mysql_fetch_array($res);if($row['ossz']!=0) {if($row['ossz']!=0) {

echo '<tr>'; echo '<tr>'; echo '<td><a href=user.php?id='.$row['uid'].'&wr=1>'.$row['nev']‘;echo '<td><a href=user.php?id='.$row['uid'].'&wr=1>'.$row['nev']‘;echo ‘</a></td>';echo ‘</a></td>';echo '<td>'.$row['ossz'].'</td>';echo '<td>'.$row['ossz'].'</td>';$ossz+=$row['ossz'];$ossz+=$row['ossz'];echo '<td>'.substr($row['utolso'],5).'</td></tr>';echo '<td>'.substr($row['utolso'],5).'</td></tr>';

}}}}echo "<tr><td>Összesen:</td><td>$ossz</td><td></td></tr>";echo "<tr><td>Összesen:</td><td>$ossz</td><td></td></tr>";

Page 18: Adatbázisok- SQL Dr. Viczián Gergely (Dr. Török János V2.0)

AdatbiztonságAdatbiztonság

Az adatbázis feladataAz adatbázis feladata minden esemény naplózásaminden esemény naplózása összeomlás után automatikus helyreállásösszeomlás után automatikus helyreállás hibás adatok kiszűrésehibás adatok kiszűrése

Rendszergazda/főnök feladataRendszergazda/főnök feladata biztonsági másolat készítésebiztonsági másolat készítése jogosultságok beállítása/ellenőrzésejogosultságok beállítása/ellenőrzése biztonsági frissítések figyelése, különösen webes biztonsági frissítések figyelése, különösen webes

alkalmazásnálalkalmazásnál auditálásauditálás