Az adatbázis létrehozásakor mindig azzal a táblával kell inditani a kódot amelyik nem tartalmaz idegen kulcsot,
és a legkevesebb adatot tatramazza, mert a kulcsok(PRIMARY KEY)majd ezekhez vezetnek el.
Ha a bonyolultabb táblával kezdünk akkor nem fogja megtalálni hogy milyen táblához kell kapcsolódni.
A tervezéskor figyelembe kell venni hogy az adtatok milyen formában kapcsolódnak.
Minél jobban szét kell bontani(normalizálni), annál jobban lehet dolgozni az adatokkal,
viszont figyelni kell hogy a tulzottan szétbontott táblákban adat duplikálódás jöhet létre.
A táblák készítésénél a kulcsokat a parancs végére tenni.
ELSŐDLEGES KULCS(PRIMARY KEY):
az elsődleges kulcs egy teljesen egyedi érték, ez az érték nem tartalmazhat NULL-t.
Egy táblának csak egyetlen egy elsődleges kulcsa lehet
AVAGY a táblán minden rekordot egyedileg beazonosít.
IDEGEN KULCS(FOREIGN KEY):
A másodlagos kulcs egy olyan oszlop vagy több oszlop,
amely kapcsolatot biztosít két tábla adatai között.
Az idegen kulcs egy olyan azonosító, amellyel egy másik tábla elsődleges kulcsára hivatkozhatunk.
GYAKORI megszorítások:
NOT NULL kötelező értékadás
UNIQUE nem fordulhat elő kétszer ugyanaz, egyedi legyen
PRIMARY KEY elsődleges kulcs, minden értéke egyedi kell hogy legyen
FOREIGN KEY idegen kulcs, egy másik táblában az elsődleges kulcs
DEFAULT alapértelmezett értéket tudunk beállítani
Új adatbázis létrehozás:
CREATE DATABASE varosok;
Tábla létrehozása elsődleges kulcsal.
CREATE TABLE `anyagtipus`(
`anyagtipus_id` INT NOT NULL AUTO_INCREMENT,
`anyagtipus` VARCHAR(255),
PRIMARY KEY(anyagtipus_id) <-- itt van a végén az elsődleges kulcs
);
Tábla létrehozása idegen kulcsokkal:
CREATE TABLE `megrendelesek`(
`munka_id` INT NOT NULL AUTO_INCREMENT,
`felhaszn_menny` INT,
`dolgozok_id` INT,
`datum_kezd` DATE,
`datum_bef` DATE,
`alapanyag_id` INT,
PRIMARY KEY(munka_id),
FOREIGN KEY (dolgozok_id) REFERENCES `dolgozok`(dolgozok_id), <-- az idegen kulcsokat is ide a végére kell tenni.
FOREIGN KEY (alapanyag_id) REFERENCES `alapanyagok`(alapanyag_id));
Ha a kulcsok nem a kód végén szerepelnek akkor szinatktikai hibát dob a program.
Tábla törlése:
pl.: DROP TABLE varosok;
Adatbázis törlése:
DROP DATABASE varosok;
Adatok törlése a táblából a tábla megtartása mellett.
TRUNCATE TABLE tábla;
Egy mező adattipusának módosítása:
pl.: ALTER TABLE varosok MODIFY COLUMN terulet double; # A városok táblában levő területek mező tipusának módosítása double tipusra.
Karakterillesztések módosítása:
ALTER TABLE varosok
CHANGE nev nev varchar(255)
CHARACTER SET utf8
COLLATE utf8_hungarian_ci; # ebben a példában az utf8_general_ci lett módosítva utf8_hungarian_ci -re.
A karakterillesztés (collation) egy olyan szabályegyüttes, amely definiálja a karakterek sorbarendezését, illetve egymáshoz hasonlítását.
A karakterkódolás befolyásolja az adattárolást, illetve a kapcsolódási médiumot a szerver és a kliens között.
A karakterillesztések, amelyek _ci (case-insesitive) végződéssel rendelkeznek, nem érzékenyek a kis- és nagybetűk közti különbségekre.
Táblák:
a táblaneveket többes számban adjuk meg. pl: tanulok
ne tartalmazzanak prefixet pl: tabla_tanulok, tbl_tanulok
Mezők:
ne használjunk többes számot.
ahol lehet kerüljük az ID elnevezés használatát.
Táblák feltöltése adattal:
Adat feltöltésekor midig a legegyszerübb táblák feltöltésével kezdünk.
Fontos!! Ok hogy primary(elsődleges kulcs) és automatikus az érték növelése(Auto_Increment),
adat feltöltéskor ezeket az értékeket is meg kell adni.
/*Anyagtipus táblába:*/
INSERT INTO `anyagtipus`(`anyagtipus`) VALUES ('1','aluminium');
/*Dolgozók táblába:*/
INSERT INTO `dolgozok` (`nev`,`beosztas`) VALUES ('1','Takács Béla','raktaros');
/*Alapanyagok tábla:*/
INSERT INTO `alapanyagok`(`anyagtipus_id`,`vastagsag`, `meret_x`, `meret_y`, `akt_mennyiseg`, `datum_be`) VALUES ('1','0.5','3000','1500','5','2023-11-04');
/*Megrendelés tábla:*/
INSERT INTO `megrendelesek`( `felhaszn_menny`, `dolgozok_id`, `datum_kezd`, `datum_bef`, `alapanyag_id`)
VALUES ('1','2','2023-11-04','2023-11-05','4');
Táblák összekapcsolása WHERE-ben:
SELECT megye.mnev, varos.vnev FROM `varos`, `megye` WHERE megye.id=varos.megyeid; tábla összekapcsolas megye a várossal
Táblák össze kapcsolása INNER JOIN-al:
SELECT telepulesek.nev, varosok.nev
FROM telepulesek INNER JOIN varosok on telepulesek.nev = varosok.nev;
SELECT DISTINCT albums.video_game FROM albums
INNER JOIN songs ON albums.album = songs.album_name
ORDER BY albums.video_game;
A SELECT DISTINCT utasítást ugyanúgy a lekérdezések megalkotásához használjuk, mint a SELECT-et,
azzal a különbséggel, hogy a SELECT DISTINCT csak a különböző, azaz egyedi, eltérő értékeket ad vissza.
Egy adatbázistáblában gyakran előfordul, hogy redundáns, azaz duplikált, ismétlődő tartalom található.
Ha ezt a redundanciát nem tudjuk megszüntetni vagy nem akarjuk, akkor lehetőségünk van a lekérdezések során
olyan lekérdező utasítást használni, amely automatikusan kiszűri az ismétlődő adatokat.
Az SQL HAVING segítségével a GROUP BY záradékkal ellátott lekérdezések által visszaadott eredményhalmazt tudjuk továbbszűrni.
SELECT vasarloID FROM vasarlasok
GROUP BY vasarloID
HAVING COUNT(vasarloID)>1;
Adatbázs feltöltése shell-ből(parancs sor) .csv fájlból:
cd mysql
mysql.exe -u root --password
LOAD DATA LOCAL INFILE 'C:/songs.csv' INTO TABLE video_game_music.songs FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
Ha kell zárni az első sort akkor a végére az IGNORE 1 LiNES kell beírni :
LOAD DATA LOCAL INFILE 'C:/songs.csv' INTO TABLE video_game_music.songs FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES;
Parancs soros sql IMPORTÁLÁS lépései:
cd mysql
mysql.exe -u user root
Maria db után
USE steam_recommendations (belépés az adatbázisba)
SOURCE 'C:/Users/2022405/Downloads/users.sql'
Parancs soros sql EXPORTÁLÁS lépései:
mysqldump -u root -p <adatbázisneve> <táblaneve> > <sqlfájlelérésiútja>
pl.:
mysqldump -u root -p steam_recommendations users > C:/Users/zoltan/Downloads/users.sql