6
MySQL Elektronikus jegyzet Széchenyi István Egyetem Távközlési tanszék Távközlés-informatika szakirány Protokollok és Szoftverek I. Zsiga Bálint Kovács Ákos

SQL.pdf

Embed Size (px)

Citation preview

  • MySQL

    Elektronikus jegyzetSzchenyi Istvn Egyetem

    Tvkzlsi tanszk

    Tvkzls-informatika szakirnyProtokollok s Szoftverek I.

    Zsiga BlintKovcs kos

  • Az relcis adatbzis-kezel rendszerekrl

    Kis mennyisg adat trolsra ltalban elegend a sokak ltal jl ismert tblzatkezel programok ltal nyjtott szolgltats. m nagy mennyisg adat esetn mr krlmnyess vlik a kezelsk. Pldul, ha csak egy zh eredmnyt szeretnnk eltrolni, elegend egyetlen tblzat, nvvel, Neptun- kddal s eredmnnyel. Viszont mi van akkor, ha a dikok eredmnyeit szeretnnk ugyangy trolni? Esetleg ugyanitt szeretnnk elrni a dikok elrhetsgt, vagy egyb adatait?A tblzat nagysgrendekkel tbb sorbl, fog llni, s ha mondjuk megvltozik valakinek a telefonszma minden sorban meg kell vltoztatni. Arrl nem is beszlve, hogy a mezk tbbsge ugyanazokat az adatokat fogja tartalmazni.

    Az adatbziskezelk ilyen feladatok elvgzsre alkalmasak.A relcis adatbzis-kezel rendszereket az adatokat sorokbl s oszlopokbl ll tblkknt s a kztk fennll kapcsolatokknt troljk.

    /* Nem csak relcis adatbzis kezelk lteznek, de a jegyzet rvidsge miatt a tbbi smra nem trnk ki rszletesen. */

    A cl teht, hogy egy nagy tblzat helyett az adatokat tbb egybefgg csoportban kezeljk, melyek kztt a kapcsolatokat a kzs tulajdonsgok adjk.A folyamatot, melynek sorn pedig az ilyen szerkezethez eljutunk normalizlsnak hvjuk.

    Az SQL nyelv s a MySQL

    Az SQL betsz feloldsa a Stuctured Query Language, ami szabvnyos lekrdez nyelvet jelent. A 70 es vekben az IBM alkotta meg s kereskedelmi forgalomba elszr 1979 -ben az Oracle rendszerben jelent meg. Ksbb az ANSI szabvnyostotta ezzel nagyban hozzjrult az SQL npszersghez s a mai adatbzis rendszerek kztti hordozhatsg megteremtshez.

    A MySQL a vilgon az egyik legelterjedtebb SQL alap adatbziskezel-rendszer (RDBMS Relational Database Management System), mely a mr megszokott szerver-kliens architektrt kveti.. Elnyei a gyorsasg, a tbb szl vgrehajts, a hordozhatsg, valamint, hogy a nylt forrskd vltozat a GPL betartsa mellett ingyenes.A tbbszlsg azt jelenti, hogy minden egyes j kapcsolat ltrehozsakor ltrejn egy j kiszolgl folyamat, s ha az tlterheln a kiszolglt valamilyen hiba folytn, csak az adott folyamat ll le, nem az egsz rendszer. A hordozhatsghoz az is hozzjrul, hogy gyakorlatilag minden nyelven ltezik hozz felhasznli fellet (PHP, Perl, C, C++, Java stb.).Az nem ingyenes vltozatokrl a http://www.mysql.com/ cmen kaphatunk tbb informcit, valamint a program rszletes dokumentcija is megtallhat a http://www.mysql.com/doc/ cmen.

  • Fogalmak

    Egy MySQL rendszer tbb adatbzis is kezelhet egy idben, ezekre adatbzis nevekkel hivatkozhatunk.

    A tblk: A tblk az adatbzisunk legnagyobb alkotrszei. sszefgg adatstruktrk trolsra hasznljuk. A MySQL rendszerekben egy tbla ltrehozsakor hrom fjl jn ltre. Ezek a tbla meghatrozst, a trolt adatokat s az adatokhoz tartoz indexeket troljuk, ugyanakkor egysgknt kell kezelni ket.

    BRA (Adatbzis -> tbla)

    Meg kell emlteni mg azt is, hogy a tblk tbbfle tpusak lehetnek. Az alaprtelmezett a MyISAM tpus tbla, mi csak ilyen tpus tblkat fogunk hasznlni.

    A mezk: A mezk adjk a tbla szerkezett, s hatrozzk meg a benne trolt adat tpust, annak hosszt, ezrt a mezk ltrehozsa a tbla ltrehozsval egy idben trtnik. Lnyegben egy tblzatkezel oszlopainak lehetne megfeleltetni ket. Egy tblban pontosan 3398 mez lehet maximlisan. Mivel azonban azt mondtuk, hogy kisebb egybefgg rszeket trolunk egy tblban, ha ezt az rtket akr csak megkzelti is a mezink szma, t kell gondolnunk az adatbzisunk szerkezett.

    Fontos dolog a tervezs kzben a mezk tpusainak megfelel kivlasztsa, mivel ez fogja meghatrozni a ksbb bevitt adatok tpust is. Fontos, hogy a mezk mrete ne legyen tl kicsi, valamint a verbre nem lvnk gyval szably is fontos.

    A recordok: A record egy bejegyzs a tblban. Azt az rtket tartalmazza, amelyet valjban trolni szeretnnk. A recordok lehetnek teljesen kitlttt, s kitltetlen recordok, ami nem biztos, hogy res recordot jelent. Mivel a mezkhz tpustl fggen alaprtelmezett rtket llthatunk be. Ha nem tltjk ki az adott mezt, ez az alaprtelmezett rtk fog szerepelni a tblzatunkban.

    A kulcsok: A kulcsok a tblk kztti kapcsolatok megteremtsnek eszkzei. A MySQL ktfle kulcstpust ismer, az elsdleges (un. primary key) s az egyedi (unique key) kulcsokat.Az elsdleges kulcsnak minden tblban szerepelnie kell. Ez az az rtk, amellyel a kapcsolatokat meghatrozzuk. Alaprtelmezs szerint ez az rtk is egyedi, valamint a gyors mkds miatt numerikus adatnak kell lennie. Nem tartalmazhat NULL rtket sem. (A NULL rtk nem azonos a 0 rtkkel, hiszen az elbbi azt jelenti, hogy a mez rtke nem tartalmaz adatot, mg az utbbinl a mez rtke 0).Az egyedi kulcsok megadsa nem ktelez, de nagyon hasznos lehet, mg elsdleges kulcsbl csak egy lehet tblkknt, addig akrhny unique key ltezhet.

    Az indexek: Az indexek a knnyebb keresst segtik az adatbzisban. Az elsdleges kulcsokhoz automatikusan ltrejn egy index tbla, m mi is ltrehozhatunk sajt indexeket a tbla tbbi mezjre, st akr tbb mezt is indexelhetnk egyttesen. Az indexelt recordokon sokkal gyorsabban lefut egy kivlaszt lekrdezs, mint az indexeletlen recordok esetn, de mgis kerlni kell a felesleges indexek ltrehozst. Hiszen, ha egy indexelt mezt akarunk mdostani, akkor a az indextblt is mdostanunk kell vele egytt, ami viszont sokkal idignyesebb feladat.

  • ltalnos elv nincs r, hogy mikor hozzunk ltre j indexeket, de mgis azt mondhatjuk, hogy ha a mindennapos hasznlat sorn gyakran trtnik kivlaszt lekrdezs az adott mezkombincira akkor rdemes ltrehozni egy indexet.

    A lekrdezsek az adatbzis-kezel rendszerekkel trtn kommunikci elemei. igazbl SQL nyelven rt parancsok. Fajtikrl s hasznlatukrl ksbb mg rszletesen szt ejtnk.

    A kapcsolatok: A tblink kztt a kulcs mezk teremtenek kapcsolatot. A kapcsolatoknak tbb fajtja lehet:

    Egy-egy kapcsolat (1 ->1): Az ilyen kapcsolatok esetben a kulcsmez csak egyszer szerepel a kapcsolt tblban. Ilyen esetre j plda lehet, amikor a vllalat kiosztja a cges autkat az alkalmazottai kztt.

    Egy-tbb kapcsolat (1->N): Az egy-tbb kapcsolat esetn a kulcsmezk a kapcsold tblban tbbszr is megjelennek. Plda r, ha a cg osztlyaihoz rendeljk hozz a dolgozkat, hiszen egy ember csak egy osztlyon dolgozhat a cgnl.

    Tbb-tbb kapcsolat (N ->M): A tbb-tbb kapcsolatok esetn a kapcsolt tbla kulcsrtke tbbszr is megjelenhet, m ugyanez a msik tblra nzve is igaz. A cges pldnl maradva ilyen amikor a projekteket s az abban dolgoz embereket brzoljuk. Nyilvn tbb ember is dolgozik ugyanazon a a projekten s egy ember nem csak egy projektben vehet rszt. Az ilyen kapcsolatokat ltalban fl szoks bontani tbb 1 tbb kapcsolatra, egy kztes tbla bevezetsvel.

    A lefoglalt szavak: A lefoglalt szavak azokat a szavakat jelentik, amelyek jelentssel brnak az SQL nyelvben ezrt nem hasznlhatjuk ket azonostknt.

    Pl: SELECT, CREATE ALTER, stb

    A mez tpusai:

    Egsz:

    tinyint: 1 byteon trolt egsz szomok. Hasznlhatunk Signed s Unsigned tinyint tpust is.Alaprtelmezett az eljeles.

    Smallint: 2 byte on trolt egsz szm. mediumint 4 byteon trolt egsz szm int 8 byteon trolt egsz szm. bigint 16 byte byteton trolt egsz.

    Lebegpontos:

    float (m,d) ahol m az sszes szmjegyek, mg d a tizedesek szmt jelenti, Alaprtelmezetten 10 szmjegy s ebbl 2 a tizedesek helye. Maximum 24 szmjegybl llnak.

    double (m,d) a float tpus nagytestvre.16,4 max 53

  • Itt jegyeznm meg azt az irnyelvet, hogy az adatbzisban csak akkor hasznljunk szm tpusokat, ha azokkal valban mveletet szeretnnk vgezni.

    Id

    DATE 1001-01-01 tl 9999-12-31 terjed dtum. DATETIME A Date tpus csak a dtumot trolja, mg a datetime az idpontot is. TIMESTAMP 1970 jan 1 tl 2037 ig eltelt msodpercek szma. Tipikusan idblyegnek

    hasznljuk, YEAR vet trolja ha kt szmjeggyel, akkor 70 -69 ig (1970 2069) ha ngy szmjegy

    akkor 1901 tl 2155 ig

    karakterlnc

    char 1-255 karakter trolsra hasznlt tpus. Alaprtelmezetten 1 karakter hossz. Fontos megjegyezni, hogy az ebben a tpusban trolt karakterlnc karaktereinek szma nem trhet el a deklarciban megadottaktl. Ez elnye s egyben htrnya is.

    varchar 1-255 karakter vltoz hosszusggal. Nincs alaprtelmezett hosszsga, ezrt mindenkppen meg kell adni. Ez azt jelenti, hogy alkalmas a megadott hosszsgig brmilyen hossz karaktersor trolsra.

    blob vagy text: 65535 karakterlnc. Nagyobb hosszsg szvegek trolsra hasznlhatjuk ket. A Blob tpus Case Sensitive, azaz rzkeny a kis s nagy betk kztti klnbsgekre, valamint alkalmas nagy mennyisg binris adat trolsra, pldul kpek. Nem elterjedt, viszont hogy magt a kpet troljuk el adatbzisban.

    Enum: Felsorols tpus. A felsorols elemeit mi adjuk meg s azokat az rtkeket veheti fel a record. Hasznos lehet, ha valami csak bizonyos szm rtket vehet fel, pldul frfi/n tavasz/nyr/sz/tl.

    Lekrdezsek:

    Az adatbzis motorral trtn kommunikci lekrdezsek segtsgvel trtnik. A hrom alapvet fajtja a sima, (SELECT) az adatmdost (INSER INTO, UPDATE, DELETE) s a tranzakcit tmogat lekrdezsek. Az utbbival a trgy keretein bell nem fogunk foglalkozni. A lekrdezsek egy utastsbl s tbb egymst kvet gynevezett zradkbl llnak. Ezek lehetnek:

    FROM: a lekrdezsben hasznlt adatok helyt adhatjuk meg itt. WHERE: egy vagy tbb szrfelttel megadsra szolgl. GROUP BY: A lekrdezs eredmnyt rendezi sorba valamilyen szempont alapjn.

    ltalban arra szoks hasznlni, hogy a vgeredmnyben kapott sorokbl a redundns adatokat.

    HAVING: A GROUP BY zradk eredmnyt szri hasonl mdon mint a group by. ORDER BY Valamilyen record szerint nvekv, vagy cskken sorba a lekrdezs

    eredmnyt.

    A zradkok egyms utn futnak le s ebben a sorrendben. Ebbl kvetkezik, hogy ORDER BY zradk mindig az utols s Group by -t nem kvethet FROM.

  • Fggvnyek:

    A MySQL-nek mint a legtbb programnyelvnek vannak beptett fggvnyei, melyek megknnytik az adatbzis-adminisztrtor dolgt a lekrdezseknl. Ezek lehetnek matematikai mveletet vgzk, karakterlncra vonatkoz fggvnyek.

    pldul:

    Matematikai: sin(), cos(), sqrt(), pow().Karakterlncra vonatkoz: trim (levgs), concat (sszefzs)

    Lteznek mg gynevezett constraint-ek, melyek a mez ltrehozsakor megadhat, ezek a mez valid rtkeinek szablyozsra szolglnak.

    Ezeket ugyan a MySQL nem tmogatja, de az SQL nyelv specifikcijban benne van, ezrt ezeket a bejegyzseket figyelmen kvl hagyja. Ebbl kifolylag a bevitt adatok ellenrzst kliens oldalon kell megoldani.

    Nhny plda:

    adatbzis ltrehozsa:create database proba;

    Adatbzis hasznlata:use proba

    Tbla ltrehozsa:create table accounts(id int not null auto_increment,username varchar(16),password varchar(16),realname varchar(50),primary key(id),);

    Adatbzis feltlts:

    insert into accounts values( 1, 'jampy', 'bela', 'Kovcs kos');

    insert into accounts values( 2, 'gecko', 'jozsi', 'Sinko Gergely');

    Egyszer lekrdezsek:

    select * from accounts where username='jampy';

    select realname from accounts where id>1;

    update accounts set password='feri' where username='gecko';