Készítette: Groff Tamás
Fogalom-meghatározások SQL: Az adatbázis kezelésnek a nyelve, ha ezt megismerjük, akkor az összes adatbázis-kezelő használatához jó alap van. MySQL: Ez egy nagyon gyakori adatbázis rendszer. Rengeteg jó tulajdonsága van: gyorsaság hordozhatóság bármely más nyelven írt felület illeszthetősége (be lehet építeni más nyelvekbe), például: PHP C C++ Java FreePascal kedvező ár (ingyenes) Párbeszéd a MySQL-lel: Három módszer van rá: MySQL-ügyfélprogram (mysql.exe) Külső fejlesztők által írt felhasználói felületek (PHPMyAdmin) Számos elterjedt programozási nyelvek bármelyike (PHP, C, C++, Java, FreePascal) Adatbázis: Több fájlból összeépülő adatok összessége. Tábla: Más néven reláció. Ebben tárolom az adatokat, MySQL tábla 3 fájlból áll a tábla meghatározása, struktúrája a táblában tárolt adatok a táblában használt indexek Mező: Más néven tulajdonság vagy attribútum. Ez a táblázat oszlopa, van neve és típusa. Egyed: Más néven rekord vagy egyed-előfordulás. Ez a táblázat 1 sora. Lehet: complete: Teljesen ki van töltve a rekord. incomplete: Nincs teljesen kitöltve a rekord. (Ne csináljunk ilyet, inkább írjunk be egy alapértelmezett értéket!) Típus: Ez határozza meg a mezőben tárolt adat fajtáját. Ez alapján tudunk később vele műveletet végezni. Többek között lehet: boolean smallint int decimal float varchar text date time Relációs adatbázis: Az adatbázis táblái között kapcsolat van, ehhez elsődleges kulcsot kell alkalmazni. Kapcsolat: A táblák egymáshoz kapcsolódnak, 3 féle kapcsolat lehet: 1 – 1: Egy alkalmazottnak csak egy számítógépje lehet.
1 – N: Egy osztályban több alkalmazott is van.
N – N: A hallgatók több kurzust vehetnek fel, és egy kurzusra is több tanuló jár.
Ezt kerüljük el és használjunk közbülső táblát hozzá!
Kulcs: A kulcs lehet: egyedi (unique): egy érték nem fordulhat többször elő elsődleges kulcs (primary): egy érték nem fordulhat többször elő és ez az összekötő elem a táblák között idegen kulcs: ez nem egy valódi kulcs, csak mi nevezzük annak, például az előző példában (középső táblában) a ’hallgato_id’ Index: Az elsődleges kulcsú mezők automatikusan indexelt mezők. Akkor érdemes újabb indexet a táblához adnunk, ha a mindennapos kiválasztó lekérdezések használják az adott mezőt vagy mezőkombinációt. Az indexek felgyorsítják az adat-visszakereső lekérdezéseket, de lassítják azokat, amelyekkel rekordokat adunk a táblához. Lekérdezés: Lekérdezésekkel tudunk az adatbázis táblájából kiolvasni, azt módosítani, hozzáadni és beszúrni.
Normalizálás ER modell (Egyed-kapcsolat modell): Ezzel ábrázolom az adatbázis részeit, úgy hogy a megbízó is megértse.
Redundancia: Egy adatott több helyen tárolók az adatbázisban. Az anomáliák forrása és a helyet is foglalja. Normalizálás: Helytelenül kialakított adatbázisban a működés során anomáliák jelentkezhetnek (törlési, módosítási, stb.) és felesleges adattárolás történhet (redundancia), ezért az adatbázist normalizálni kell. Az adatbázis-kezelő minimum 1. normálformát vár el. A normalizálás során csökkentjük a redundanciát, azaz csökken az adatok fölösleges tárolása (több példányban), kisebb lesz a helyfoglalás és az anomália keletkezése is csökken. Most a példánk egy áruház adatbázisának elkészítése. 0. NF (még nincs normálformában): ez a kezdő tábla, 1 tábla van sok mezővel. Vasarlas Datum Mennyiseg Termek_ID Termek_nev Kategoria_ID Kategoria_nev Elado_ID Elado_nev Elado_cim * * * * * * * * * * * * * * * * * * A mezők között függőségek vannak, például az Elado_ID (személyiszám) meghatározza az eladó nevét, ez redundanciát okoz, ez vezet az anomáliákhoz. Anomália akkor keletkezik, ha nem összetartozó mezők vannak egy adott relációban. Azt, hogy mi tartozik egy relációba, azt a mezők közti függőségek határozzák meg. Elado_ID Elado_nev Az adatok ismeretében föl kell tárni ezeket a függőségeket. Függőségek (most csak a lényegeseket írom le): Termek_ID Termek_nev,Kategoria_ID,Kategoria_nev Elado_ID Elado_nev,Elado_cim Mennyiseg Datum
1. NF:
van kulcs a relációban egy mezőnek legfeljebb egy értéke lehet
Vasarlas Datum * * 2. NF:
Mennyiseg * *
Termek_ID * *
Termek_nev * *
Kategoria_ID * *
Kategoria_nev * *
Elado_ID * *
Elado_nev * *
Elado_cim * *
1. normálformában van nincs a kulcs egy részéből kiinduló függőség (ami nem kulcs mező, az a kulcs egészétől függ, vagy egy nem kulcstól) ilyenkor a táblázatot szét kell bontani (ha több elsődleges kulcsú mező van a relációban) most át is alakítsuk egy kicsit a jobb működés érdekében
Eladok Elado_ID * * Termekek Termek_ID * *
Nev * *
Iranyitoszam * *
Termek_nev * *
Vasarlasok Sorszam * *
Kategoria_ID * *
Datum * *
Varos * *
Utca * *
Kategoria_nev * *
Elado_ID * *
Hazszam * *
Mertekegyseg * *
Termek_ID * *
Mennyiseg * *
A Vasarlasok.Elado_ID idegenkulcsként kapcsolódik az Eladok.Eladok_ID mezőhöz, így többek között az eladó nevét is lekérdezhetem. A Vasarlasok.Termek_ID idegenkulcsként kapcsolódik a Termekek.Termek_ID mezőhöz, így többek között a termék nevét és mértékegységét is lekérdezhetem. 3. NF:
2. normálformában van nem kulcs nem függ nem kulcstól a táblákat még tovább bontjuk
Eladok Elado_ID * *
Nev * *
Termekek Termek_ID * *
Termek_nev * *
Vasarlasok Sorszam * *
Iranyitoszam * *
Datum * *
Utca * *
Hazszam * *
Kategoriak Kategoria_ID * *
Kategoria_ID * *
Elado_ID * *
A táblák közti kapcsolat: Eladok.Iranyitoszam = Varosok.Iranyitoszam Termekek.Kategoria_ID = Kategoriak.Kategoria_ID Vasarlasok.Elado_ID = Eladok.Elado_ID Vasarlasok.Termek_ID = Termekek.Termek_ID
Varosok Iranyitoszam * *
Termek_ID * *
Mennyiseg * *
Varos * *
Kategoria_nev * *
Mertekegyseg * *
MySQL monitor használata (CMD – mysql.exe)
Belépés a MySQL monitorba: C:\Users\Gufi>cd C:\wamp\bin\mysql\mysql5.6.17\bin C:\wamp\bin\mysql\mysql5.6.17\bin>mysql Welcome to the MySQL monitor. MySQL monitor használata: mysql>USE test; //használom a test adatbázist //pontosveszővel zárom az SQL utasítást Database changed. //beléptem a test adatbázisba mysql> Karakterláncok használata az SQL utasításban: 'karakterlánc' vagy "karakterlánc" Váltókarakter használata (\' vagy \"): ("ez /"itt/" idézőjelet ír ki") O'Connor utasításba illesztése: ("O'Connor") vagy ('O\'Connor') Van amikor mindenféleképp használni kell a váltókaraktert: O'Connor így szólt: "Bú" az SQL utasításban: ('O\'Connor így szólt: "Bú" ') vagy ("O'Connor így szólt: \"Bú\"") Ezeket a karakterláncot jelölő jeleket kedvünk szerint egymásba ágyazhatjuk, de csak futtatható formában. Döntsük el hogy melyiket használjuk alapként a karakterlánc jelölésére (A jegyzetben az "idézőjelet" használjuk)
MySQL felügyeleti eszközei: mysqladmin (mysqladmin.exe):
Lépjünk be a CMD-vel a MySQL mappájába: C:\Users\Gufi>cd C:\wamp\bin\mysql\mysql5.6.17\bin #prompt>mysqladmin --help //a mysqladmin parancskészletét listázzuk #prompt> mysqladmin create test_db //test_db nevű adatbázis létrehozása #prompt> mysqladmin drop test_db //test_db nevű adatbázis törlése #prompt> mysqladmin status //a MySQL információk lekérdezése A #prompt megegyezik a C:\wamp\bin\mysql\mysql5.6.17\bin pozícióval.
mysqldump (mysqldump.exe):
Lépjünk be a CMD-vel a MySQL mappájába: C:\Users\Gufi>cd C:\wamp\bin\mysql\mysql5.6.17\bin #prompt> mysqldump --help //a mysqldump parancskészletét listázzuk #prompt> mysqldump test_db //a képernyőre írja a test_db adatait (SQL kódon kiírja a táblákat és adatokat) #prompt> mysqldump test_db > mydump.sql //a test_db adatbázist fájlba mentem ki
phpMyAdmin használata
PHP nyelven írt weblap, ami kezeli a MySQL adatbázist hozzuk létre ezt (test_db) az adatbázist újra a phpMyAdmin segítségével New Database
lépjünk be a test_db adatbázisba hozzuk létre a táblát
adjuk meg a mezők tulajdonságait
nyissuk meg a gyumolcs táblát és szúrjunk be pár sort (most csak a gyümölcs nevét kell kitölteni)
az eredmény
A MySQL biztonságának alapjai A MySQL három biztonsági pontja: honnan próbálunk csatlakozni (a hálózati számítógép) ki próbál csatlakozni (felhasználói név és jelszó) milyen műveletek engedélyezettek számunkra (parancs-végrehajtási jogosultságaink) Ezek az adatok a MySQL nevű adatbázisban tárolódnak. Itt több tábla is található, többek között: user: egy adott felhasználó parancsokra vonatkozó jogait tárolja host: azokat a számítógépeket határozza meg, ahonnan csatlakozni lehet az egyes adatbázisokhoz func: a felhasználók által megadott függvények tároló helye db: meghatározza az engedélyeket a kiszolgálón lévő összes adatbázisra tables_priv: egy adatbázison belüli táblákhoz való felhasználói jogokat tárolja columns_priv: a felhasználók egyes táblákon belüli mezők hozzáférési jogosultságait határozzák meg További biztonsági pontok: a MySQL-t ne root fiókkal futtassuk használjunk minden adatbázishoz külön rendszergazda fiókot használjunk minden fiókhoz jelszót a localhost jelszó nélkül is működhet addig, amíg az adatbázist létrehozzuk és üzembe nem helyezzük (phpMyAdmin)
Felhasználói fiók létrehozása GRANT jogok ON adatbazisnev.tablanev TO felhasznalonev@hostnev IDENTIFIED BY ’jelszo’; A következő jogosultságokat adhatjuk: ALL: megadja az összes jogot a felhasználónak ALTER: a felhasználó módosíthatja a táblákat, oszlopokat és indexeket CREATE: a felhasználó létrehozhat adatbázisokat és táblákat DELETE: a felhasználó rekordokat törölhet a táblából DROP: a felhasználó táblákat és adatbázisokat törölhet FILE: a felhasználó írhat és olvashat fájlokat; ez használatos adatok importálásánál és fájlba írásánál (dump) INSERT: a felhasználó rekordokat szúrhat be egy táblába PROCESS: a felhasználó láthatja és leállíthatja a rendszerfolyamatokat; csak bizalmas felhasználóknak szabad ezt a jogot megadni REFERENCES: jelenleg nem használja a MySQL, de a user táblában létezik a hozzá tartozó tulajdonság RELOAD: a felhasználó kiadhat FLUSH-utasításokat; csak bizalmas felhasználóknak szabad ezt a jogot megadni SELECT: a felhasználó legyűjthet rekordokat a táblából SHUTDOWN: a felhasználó leállíthatja a MySQL-kiszolgálót; csak bizalmas felhasználóknak szabad ezt a jogot megadni UPDATE: a felhasználó módosíthatja a táblák rekordjait USAGE: a felhasználó csatlakozhat a MySQL-hez, csakhogy nincsenek más jogosultságai Példák a felhasználó létrehozására: A * az összes táblára vonatkoztat, a % az összes hálózati számítógépnek engedélyezi. GRANT SELECT, INSERT ON myDB.* TO john@’%’ IDENTIFIED BY ’99hjc’;
//lekérdezhet és hozzáadhat //a myDB minden tábláján //john felhasználó, bármelyik számítógépről //99hjc jelszóval
GRANT ALL ON myVallalat.alkalmazottak TO
[email protected] //TO jane@’63.124.45.2’ IDENTIFIED BY ’45sdg11’;
//mindent csinálhat //a myVallalat alkalmazottak tábláján //jane felhasználó 1 adott gépről //45sdg11 jelszóval
Felhasználó jogainak visszavonása REVOKE jogok ON adatbazisnev.tablanev FROM felhasznalonev@hostnev; Példa: REVOKE INSERT //beszúrás jogát letiltom ON myDB.* //a myDB adatbázis minden tábláján FROM john@’%’; //a john felhasználónak minden gépről
Első adatbázisunk tábláinak elvi felvázolása Az első adatbázisunk, egy címjegyzék adatbázis (kapcsolatkezelő rendszer) létrehozása a feladatunk. Ehhez több folyamaton keresztül jutunk el. Az első a táblák elvi felépítésének meghatározása. Alapvető adatok: név cím telefonszám faxszám elektronikus levélcím (email-cím) munkahelyi beosztás munkahely személyes feljegyzések Tábla
Tárolandó adat
Név Munkahelyi beosztás Munkahely Cím Telefonszám Faxszám Elektronikus levélcím Személyes megjegyzések
azonosító, vezetéknév, keresztnév azonosító, beosztás azonosító, a munkahely neve azonosító, irányítószám, megye, településnév, utca, házszám, otthon/munkahely/egyéb jelzése azonosító, országkód, szám, otthon/munkahely/egyéb jelzése azonosító, országkód, szám, otthon/munkahely/egyéb jelzése azonosító, elektronikus levélcím, otthon/munkahely/egyéb jelzése azonosító, létrehozás dátuma, megjegyzés
Indokolt lehet akár az összes tábla összes rekordjához tárolni a létrehozás és módosítás dátumát. A létrehozás és módosítás dátumának akkor van fontos szerepe, amikor meg szeretnénk szabadulni a régi adatoktól, vagy olyan adatokat keresünk, amelyek egy bizonyos időszakban kerültek az adatbázisba. Tábla Név Munkahelyi beosztás Munkahely Cím Telefonszám Faxszám Elektronikus levélcím Személyes megjegyzések
Tárolandó adat azonosító, létrehozás dátuma, módosítás dátuma, vezetéknév, keresztnév azonosító, létrehozás dátuma, módosítás dátuma, beosztás azonosító, létrehozás dátuma, módosítás dátuma, a munkahely neve azonosító, létrehozás dátuma, módosítás dátuma, irányítószám, megye, településnév, utca, házszám, otthon/munkahely/egyéb jelzése azonosító, létrehozás dátuma, módosítás dátuma, országkód, szám, otthon/munkahely/egyéb jelzése azonosító, létrehozás dátuma, módosítás dátuma, országkód, szám, otthon/munkahely/egyéb jelzése azonosító, létrehozás dátuma, módosítás dátuma, elektronikus levélcím, otthon/munkahely/egyéb jelzése azonosító, létrehozás dátuma, módosítás dátuma, megjegyzés
A tábláink most így festenek:
Most mindegyik táblában meghatározzuk az elsődleges kulcsot, ami az id mező lesz. Ezzel az adatbázisunk 1. NF-ban van.
Az adatbázis és a hozzá tartozó felhasználói fiókok létrehozása C:\Users\Gufi>cd C:\wamp\bin\mysql\mysql5.6.17\bin C:\wamp\bin\mysql\mysql5.6.17\bin>mysql Welcome to the MySQL monitor. mysql>CREATE DATABASE kapcsolat_db; //kapcsolat_db adatbázis létrehozása mysql>USE mysql; //belépek a mysql adatbázisba, hogy tudjak a user táblában dolgozni //most létrehozunk egy rendszergazda fiókot a kapcsolat_db adatbázishoz mysql>GRANT ALL //minden joggal ->ON kapcsolat_db.* //a kapcsolat_db adatbázis minden tábláján ->TO gufi@localhost //gufi felhasználó a helyi gépen ->IDENTIFIED BY ’gufimester3’; //gufimester3 jelszóval //most létrehozunk egy csak lekérdezést készíthető egyszerű felhasználót a kapcsolat_db adatbázishoz mysql>GRANT SELECT //lekérdező joggal ->ON kapcsolat_db.* //a kapcsolat_db adatbázis minden tábláján ->TO kerdezo@localhost
//kerdezo felhasználó a helyi gépen
->IDENTIFIED BY ’lekerdezo’; //lekerdezo jelszóval mysql>QUIT //kilépünk a mysql kiszolgálóból
A MySQL adattípusai Numerikus adattípusok: Típus
Méret
TINYINT SMALLINT MEDIUMINT INT/INTEGER
1 byte 2 byte 3 byte 4 byte
BIGINT
8 byte
FLOAT (M, D)
4 byte
24 tizedes jegyig ábrázolható
DOUBLE (M, D)/REAL (M, D)
8 byte
53 tizedes jegyig ábrázolható
DECIMAL (M, D)/ NUMERIC (M, D)
M + 2 byte
tömörítetlen lebegőpontos szám
Tartomány -128 … 127 -32.768 … 32.767 -8.388.608 … 8.388.607 -2.147.483.648 … 2.147.483.647 -9.223.372.036.854.775.808 … 9.223.372.036.854.775.807
0 … 255 0 … 65.535 0 … 16.777.215 0 … 4.294.967.295 0 … 18.446.744.073.709.551.615 M és D megadása nem kötelező, alapértelmezett 10,2 M és D megadása nem kötelező, alapértelmezett 16,4 M és D megadása kötelező
Dátum- és időtípusok: Típus DATE DATETIME TIMESTAMP TIME YEAR
Méret
Formátum
Tartomány
3 byte 8 byte 4 byte 3 byte 1 byte
ÉÉÉÉ-HH-NN ÉÉÉÉ-HH-NN ÓÓ:PP:MM ÉÉÉÉHHNNÓÓPPMM ÓÓ:PP:MM ÉÉÉÉ
1000-01-01 … 9999-12-31 1000-01-01 00:00:00 … 9999.12.31 23:59:59 19700101000000 … 20371231235959 00:00:00 … 23:59:59 1900 … 2155
Karakterlánc-típusok: CHAR 0 … 255 karakter lehet meghatározott hosszúságú (jobbról az üres helyeket szóközzel tölti ki) a hossz meghatározása nem kötelező az alapértelmezett hossz: 1 VARCHAR 0 … 255 karakter lehet változó hosszúságú karakterlánc a hossz megadása kötelező BLOB 0 … 65.535 karakter lehet képek, egyéb típusú fájlok tárolására használatos a kis és nagy betűt megkülönbözteti a hosszt nem adjuk meg TEXT 0 … 65.535 karakter lehet nagy mennyiségű szöveges adat tárolására használhatóak a kis és nagy betűt nem különbözteti meg a hosszt nem adjuk meg TINYBLOB/TINYTEXT olyan mint a BLOB/TEXT 0 … 255 karakter lehet MEDIUMBLOB/MEDIUMTEXT olyan mint a BLOB/TEXT 0 … 16.777.215 karakter lehet LONGBLOB/LONGTEXT olyan mint a BLOB/TEXT 0 … 4.294.967.295 karakter lehet ENUM egy felsorolás (enumeration) vagy lista a tételek olyan listáját hozzuk létre, amiből az értéket ki lehet választani, esetleg NULL lehet példa: ENUM(’A’, ’B’, ’C’) így az érték lehet A, B, C vagy NULL 65.535 féle értékkel rendelkezhet + 1 (NULL)
A táblák létrehozása 1. rész A táblák létrehozásához három fontos dolgot kell megadni: a tábla neve a mezők nevei az egyes mezők meghatározásai Általános parancsformátum: CREATE TABLE tabla_neve(oszlop_neve oszlop_tipusa);
Előzetes táblalétrehozó utasítások: CREATE TABLE nev ( //tábla létrehozása id SMALLINT UNSIGNED, //id: 0 … 65.535 letrehozva DATETIME, //letrehozva: 1000-01-01 00:00:00 … 9999-12-31 23:59:59 modositva DATETIME, //modositva: 1000-01-01 00:00:00 … 9999-12-31 23:59:59 vezeteknev VARCHAR(75), //vezeteknev: max. 75 karakter hosszú keresztnev VARCHAR(75) //keresztnev: max. 75 karakter hosszú ); //létrehozás lezáró része CREATE TABLE munkahelyi_beosztas ( id SMALLINT UNSIGNED, letrehozva DATETIME, modositva DATETIME, beosztas VARCHAR(100) ); CREATE TABLE munkahely ( id SMALLINT UNSIGNED, letrehozva DATETIME, modositva DATETIME, munkahely_nev VARCHAR(100) ); CREATE TABLE cím ( id SMALLINT UNSIGNED, letrehozva DATETIME, modositva DATETIME, iranyitoszam VARCHAR(4), megye VARCHAR(5), telepulesnev VARCHAR(50), utca_hazszam VARCHAR(255), tipus ENUM (’otthoni’, ’munkahelyi’, ’egyéb’) ); CREATE TABLE telefon ( id SMALLINT UNSIGNED, letrehozva DATETIME, modositva DATETIME, orszagkod VARCHAR(3), //HU tel_szam VARCHAR(25) , tipus ENUM (’otthoni’, ’munkahelyi’, ’egyéb’) ); CREATE TABLE fax ( id SMALLINT UNSIGNED, letrehozva DATETIME, modositva DATETIME, orszagkod VARCHAR(3), //HU fax_szam VARCHAR(25) , tipus ENUM (’otthoni’, ’munkahelyi’, ’egyéb’) ); CREATE TABLE email ( id SMALLINT UNSIGNED, letrehozva DATETIME, modositva DATETIME, email VARCHAR(150) , tipus ENUM (’otthoni’, ’munkahelyi’, ’egyéb’) );
//stringként tárolom //rövidítve fogjuk tárolni (Borsod-Abaúj-Zemplén BAZ)
//lehet nagyon hosszú utca és házszám kombináció //a felsorolás alkalmazása
CREATE TABLE szem_megj ( id SMALLINT UNSIGNED, letrehozva DATETIME, modositva DATETIME, megjegyzes TEXT );
Kulcsok és indexek a táblában Elsődleges kulcs (PRIMARY KEY) : elsődleges kulcsnak minden táblában szerepelnie kell és csak 1 lehet benne lehetővé teszi a táblák közti kapcsolatot minden érték csak egyszer szerepelhet az oszlopban (egyedi kulcs) az elsődleges kulcs a rugalmasság és a gyors működés érdekében mindig numerikus (számláló) az értékét önműködően növelhetjük (AUTO_INCREMENT) nem tartalmazhat NULL értéket (NOT NULL) Az elsődleges kulcs kétféle létrehozása: CREATE TABLE tabla_neve ( oszlop_neve oszlop_tipus PRIMARY KEY NOT NULL, //elsődleges kulcsú mező létrehozása oszlop_neve2 oszlop_tipus ); CREATE TABLE tabla_neve ( oszlop_neve oszlop_tipus NOT NULL, //olyan mező létrehozása, amiben nem lehet NULL érték oszlop_neve2 oszlop_tipus, PRIMARY KEY(oszlop_neve) //az elsődleges kulcsú mező utólagos kijelölése ); Alapértelmezett érték (DEFAULT) : CREATE TABLE tabla_neve ( oszlop_neve oszlop_tipus NOT NULL DEFAULT ’0’, //alapértelmezett érték: 0 oszlop_neve2 oszlop_tipus, PRIMARY KEY(oszlop_neve) ); Ha nem adunk meg értéket, akkor a 0-t adja alapként, de ez még nem jó, mert csak egyszer lehet a 0 is, ezért használnunk kell az AUTO_INCREMENT-et. Önműködő számláló használata (AUTO_INCREMENT) : Az AUTO_INCREMENT a legnagyobb értékű rekord értékénél eggyel nagyobb értéket rendeli az új rekordhoz a NULL helyett. Így nekünk nem kell mindig lekérdezni, hogy milyen sorszámú legyen a rekord, mert önműködően végrehajtja. CREATE TABLE tabla_neve ( oszlop_neve oszlop_tipus NOT NULL DEFAULT NULL //itt kicsit másképp kellett megadni AUTO_INCREMENT, //önműködő növelés oszlop_neve2 oszlop_tipus DEFAULT ’valami’, //ilyen helyzetben adhatunk meg konkrét értéket PRIMARY KEY(oszlop_neve) ); Egyedi kulcs (UNIQUE) : minden érték csak egyszer szerepelhet az oszlopban tartalmazhat NULL értéket nem muszáj egyedi kulcsú mezőnek lennie a táblában több egyedi kulcsú mező is lehet a táblában Egyedi kulcs létrehozása: CREATE TABLE tabla_neve ( oszlop_neve oszlop_tipus NOT NULL DEFAULT NULL AUTO_INCREMENT, oszlop_neve2 oszlop_tipus UNIQUE, PRIMARY KEY(oszlop_neve) );
Indexek hozzáadása a tábláinkhoz: A kulcs mezőkhöz önműködően létrejön az index is, de ezen kívül meghatározhatunk további indexeket is. CREATE TABLE tabla_neve ( oszlop_neve oszlop_tipus NOT NULL DEFAULT NULL AUTO_INCREMENT, oszlop_neve2 oszlop_tipus UNIQUE, oszlop_neve3 oszlop_tipus, INDEX idx_oszl3(oszlop_neve3), //az adott mező legyen index is INDEX idx_oszlopok(oszlop_neve2, oszlop_neve3), //több oszlopból álló index létrehozása PRIMARY KEY(oszlop_neve) ); CREATE INDEX idx_oszlopok //index utólagos hozzáadása a táblához ON tabla_neve(oszlop_neve2, oszlop_neve3); Mikor használjunk és mikor ne indexeket? használjunk, ha személyes profilok tárolását csináljuk az adott mezőt sokszor használjuk a lekérdezésben (például knev=’Gyula’) ne használjunk, ha egy táblában többször kell új adatot felvenni, illetve a korábbiakat módosítani, mint adatokat lekérdezni csak tárolás céljából mentjük az adatokat a lekérdezés nagyszámú egyforma keresési eredményt ad vissza (országkód) kis méretű táblákról van szó (ha nagyobb lesz a tábla, akkor utólag adhatunk hozzá indexet)
A táblalétrehozó utasítások végleges formája CREATE TABLE nev ( id SMALLINT UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT, letrehozva DATETIME DEFAULT ’0000-00-00 00:00:00’, modositva DATETIME DEFAULT ’0000-00-00 00:00:00’, szemi_szam VARCHAR(8) NOT NULL UNIQUE, vezeteknev VARCHAR(75), keresztnev VARCHAR(75), cim_id SMALLINT UNSIGNED NOT NULL DEFAULT ’0’, //idegen kulcs INDEX idx_vn (vezeteknev), INDEX idx_kn (keresztnev), PRIMARY KEY (id) ); CREATE TABLE munkahelyi_beosztas ( id SMALLINT UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT, letrehozva DATETIME DEFAULT ’0000-00-00 00:00:00’, modositva DATETIME DEFAULT ’0000-00-00 00:00:00’, beosztas VARCHAR(100) UNIQUE, INDEX idx_beoszt (beosztas), PRIMARY KEY (id) ); CREATE TABLE munkahely ( id SMALLINT UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT, letrehozva DATETIME DEFAULT ’0000-00-00 00:00:00’, modositva DATETIME DEFAULT ’0000-00-00 00:00:00’, munkahely_nev VARCHAR(100), szekhely SMALLINT UNSIGNED NOT NULL DEFAULT ’0’, //idegen kulcs INDEX idx_mhely (munkahely_nev), PRIMARY KEY (id) );
CREATE TABLE cim ( id SMALLINT UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT, letrehozva DATETIME DEFAULT ’0000-00-00 00:00:00’, modositva DATETIME DEFAULT ’0000-00-00 00:00:00’, iranyitoszam VARCHAR(4), telepulesnev VARCHAR(50) NOT NULL, //idegen kulcs utca_hazszam VARCHAR(255), tipus ENUM (’otthoni’, ’munkahelyi’, ’egyéb’), PRIMARY KEY (id) ); CREATE TABLE telepulesek ( telepules VARCHAR(50) NOT NULL, letrehozva DATETIME DEFAULT ’0000-00-00 00:00:00’, modositva DATETIME DEFAULT ’0000-00-00 00:00:00’, megye VARCHAR (5) NOT NULL, //idegen kulcs PRIMARY KEY (telepules) ); CREATE TABLE megyek ( megye VARCHAR(5) NOT NULL, letrehozva DATETIME DEFAULT ’0000-00-00 00:00:00’, modositva DATETIME DEFAULT ’0000-00-00 00:00:00’, megye_nev VARCHAR (100) NOT NULL, PRIMARY KEY (megye) ); CREATE TABLE telefon ( id SMALLINT UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT, letrehozva DATETIME DEFAULT ’0000-00-00 00:00:00’, modositva DATETIME DEFAULT ’0000-00-00 00:00:00’, nev_id SMALLINT UNSIGNED NOT NULL DEFAULT ’0’, //idegen kulcs orszagkod VARCHAR(3), tel_szam VARCHAR(25) UNIQUE, tipus ENUM (’otthoni’, ’munkahelyi’, ’egyéb’), PRIMARY KEY (id) ); CREATE TABLE fax ( id SMALLINT UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT, letrehozva DATETIME DEFAULT ’0000-00-00 00:00:00’, modositva DATETIME DEFAULT ’0000-00-00 00:00:00’, nev_id SMALLINT UNSIGNED NOT NULL DEFAULT ’0’, //idegen kulcs orszagkod VARCHAR(3), fax_szam VARCHAR(25) UNIQUE, tipus ENUM (’otthoni’, ’munkahelyi’, ’egyéb’), PRIMARY KEY (id) ); CREATE TABLE email ( id SMALLINT UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT, letrehozva DATETIME DEFAULT ’0000-00-00 00:00:00’, modositva DATETIME DEFAULT ’0000-00-00 00:00:00’, nev_id SMALLINT UNSIGNED NOT NULL DEFAULT ’0’, //idegen kulcs email VARCHAR(150) UNIQUE, tipus ENUM (’otthoni’, ’munkahelyi’, ’egyéb’), PRIMARY KEY (id) );
CREATE TABLE szem_megj ( id SMALLINT UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT, letrehozva DATETIME DEFAULT ’0000-00-00 00:00:00’, modositva DATETIME DEFAULT ’0000-00-00 00:00:00’, nev_id SMALLINT UNSIGNED NOT NULL DEFAULT ’0’, //idegen kulcs megjegyzes TEXT, PRIMARY KEY (id) ); CREATE TABLE nev_munkahely_kapcs ( id SMALLINT UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT, letrehozva DATETIME DEFAULT ’0000-00-00 00:00:00’, modositva DATETIME DEFAULT ’0000-00-00 00:00:00’, nev_id SMALLINT UNSIGNED NOT NULL, //idegen kulcs munkahely_id SMALLINT UNSIGNED NOT NULL, //idegen kulcs beosztas_id SMALLINT UNSIGNED NOT NULL, //idegen kulcs PRIMARY KEY (id) );
A táblalétrehozó utasítások futtatása C:\Users\Gufi>cd C:\wamp\bin\mysql\mysql5.6.17\bin C:\wamp\bin\mysql\mysql5.6.17\bin>mysql -h localhost -u gufi –p Enter password:*********** //gufimester3 Welcome to the MySQL monitor. mysql>USE kapcsolat_db; //belépek az adatbázisunkba mysql>CREATE TABLE nev ( ->id SMALLINT UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT, ->letrehozva DATETIME DEFAULT ’0000-00-00 00:00:00’, ->modositva DATETIME DEFAULT ’0000-00-00 00:00:00’, ->szemi_szam VARCHAR(8) NOT NULL UNIQUE, ->vezeteknev VARCHAR(75), ->keresztnev VARCHAR(75), ->cim_id SMALLINT UNSIGNED NOT NULL DEFAULT ’0’, //idegen kulcs ->INDEX idx_vn (vezeteknev), ->INDEX idx_kn (keresztnev), ->PRIMARY KEY (id) ->); mysql>//a munkahelyi_beosztas, a munkahely és a nev_munkahely_kapcs táblákat is létrehozzuk a korábban leírt utasítással
mysql>SHOW TABLES;
Az SQL-parancsok használata külső fájlból Lépjünk ki a mysql-ből. Írjuk meg a tablak.sql fájl tartalmát és helyezzük el: C:\wamp/bin/mysql/mysql5.6.17/bin/sql/tablak.sql
Futtassuk le a külső fájlban (tablak.sql) lévő parancsokat: C:\Users\Gufi>cd C:\wamp\bin\mysql\mysql5.6.17\bin C:\wamp\bin\mysql\mysql5.6.17\bin>mysql -h localhost -u gufi –pgufimester3 < sql/tablak.sql C:\wamp\bin\mysql\mysql5.6.17\bin> Figyeljünk az esetleges hibákra: aposztróf eltérés magyar ékezetes karakterek importálása a táblák mindegyike meg van-e Egy tábla szerkezetének lekérdezése: mysql>DESCRIBE email;
Idegen kulcs használata Idegen kulcs (FOREIGN KEY) : utal a másik tábla elsődleges kulcsára az idegen kulcs megadása hasonló az elsődleges kulcshoz meg kell adni, hogy melyik tábla melyik mezőjéhez kapcsolódik CREATE TABLE tabla1 ( oszlop1 tipus1 NOT NULL DEFAULT NULL AUTO_INCREMENT, oszlop2 tipus2, PRIMARY KEY (oszlop1) ); CREATE TABLE tabla2 ( oszlop3 tipus3 NOT NULL DEFAULT NULL AUTO_INCREMENT, oszlop4 tipus2, oszlop5 tipus5, PRIMARY KEY (oszlop3), FOREIGN KEY (oszlop4) REFERENCES tabla1(oszlop1) //idegen kulcs használata );
Tovább Tovább 116.oldal