Podatke lahko v podatkovno bazo vnesemo ročno, z obrazci, s poizvedbami ali z uvozom iz datoteke. Uvoz podatkov je uporaben takrat, ko imamo večje število zapisov že pripravljenih v besedilni datoteki, na primer v datoteki CSV.
Za uvoz podatkov lahko uporabimo grafični vmesnik phpMyAdmin ali ukaz LOAD DATA. Ukaz LOAD DATA je posebej uporaben, kadar želimo večje število zapisov hitro prenesti iz datoteke v tabelo.
Pomni: Pred uvozom podatkov mora tabela že obstajati. Stolpci v datoteki se morajo ujemati s stolpci v tabeli oziroma moramo v ukazu jasno določiti, v katere stolpce se podatki uvozijo.
Pri začetnem učenju je pogosto najlažje podatke uvoziti s pomočjo orodja phpMyAdmin. Ukaz LOAD DATA pa omogoča bolj natančen nadzor nad datoteko, ločili in naborom znakov.
Vsebina strani
Osnovna pravila
Pri uvozu podatkov moramo preveriti, kako je datoteka zapisana in kako je pripravljena ciljna tabela. Pomembni so predvsem vrstni red stolpcev, ločila, kodiranje znakov in morebitna prva vrstica z naslovi stolpcev.
- Datoteka mora biti dostopna strežniku ali odjemalcu, odvisno od načina uvoza.
- Tabela, v katero uvažamo podatke, mora biti ustvarjena pred uvozom.
- Podatkovni tipi stolpcev morajo ustrezati podatkom v datoteki.
- Ločilo med polji mora biti pravilno določeno, na primer
;,,ali\t. - Pri datotekah s šumniki je treba uporabiti ustrezen nabor znakov, na primer
utf8mb4. - Če prva vrstica vsebuje naslove stolpcev, jo pri uvozu preskočimo z določilom
IGNORE 1 LINES.
Pozor: Pred uvozom večje datoteke je priporočljivo najprej preizkusiti uvoz na manjši testni datoteki. Tako lažje odkrijemo napačna ločila, napačen nabor znakov ali neujemanje stolpcev.
Osnovna sintaksa
Osnovna oblika ukaza LOAD DATA je naslednja:
LOAD DATA [LOCAL] INFILE 'ime_datoteke'
INTO TABLE ime_tabele
[CHARACTER SET utf8mb4]
[FIELDS TERMINATED BY 'ločilo_polj']
[LINES TERMINATED BY 'ločilo_vrstic']
[IGNORE število LINES];
Najpomembnejši deli ukaza so:
INFILEdoloča datoteko, iz katere uvažamo podatke,INTO TABLEdoloča tabelo, v katero uvažamo podatke,CHARACTER SETdoloča nabor znakov,FIELDS TERMINATED BYdoloča ločilo med polji,LINES TERMINATED BYdoloča ločilo med vrsticami,IGNORE 1 LINESpreskoči prvo vrstico, če vsebuje naslove stolpcev.
Pomni: Ukaz LOAD DATA ne ustvari tabele. Uporabimo ga šele takrat, ko tabela že obstaja in ima ustrezno zgradbo.
Razlika med LOCAL in brez LOCAL
Pri ukazu LOAD DATA je pomembno, kje se nahaja datoteka, ki jo uvažamo. Beseda LOCAL določa, da se datoteka bere z računalnika odjemalca. Brez besede LOCAL se datoteka bere iz datotečnega sistema strežnika podatkovne baze.
| Zapis | Pomen | Uporaba |
|---|---|---|
LOAD DATA INFILE |
Datoteka mora biti dostopna strežniku podatkovne baze. | Uporabno pri strežniškem okolju, kjer je datoteka že na strežniku. |
LOAD DATA LOCAL INFILE |
Datoteka se bere z računalnika odjemalca. | Uporabno pri lokalnem razvoju ali delu z datoteko na osebnem računalniku. |
Če uporabljamo LOAD DATA INFILE brez besede LOCAL, mora biti datoteka dostopna strežniku podatkovne baze. Če uporabljamo LOAD DATA LOCAL INFILE, se datoteka bere z odjemalčevega računalnika.
Pot do datoteke
Pri polni poti do datoteke lahko v okolju Windows uporabimo zapis z dvojnimi poševnicami ali z navadnimi poševnicami:
'D:\\vaje\\podatki.txt'
ali
'D:/vaje/podatki.txt'
Pri pisanju poti je pomembno, da se pot ujema z dejansko lokacijo datoteke in da ima program pravico branja datoteke.
Pozor: Napaka pri poti do datoteke je ena najpogostejših težav pri uvozu. Pred izvajanjem ukaza je treba preveriti ime datoteke, mapo in končnico datoteke.
Nabor znakov
Pri besedilnih datotekah je priporočljivo uporabiti utf8mb4, saj pravilno podpira šumnike in druge znake Unicode. Nabor znakov določimo z delom CHARACTER SET utf8mb4.
CHARACTER SET utf8mb4
Če je datoteka shranjena v drugačnem kodiranju kot uvoz, se lahko posebni znaki prikažejo napačno.
Ločila polj in vrstic
Ločilo_polj in ločilo_vrstic sta odvisna od datoteke, ki jo uvažamo. Najpogostejša ločila so:
- vejica
,pri številnih datotekah CSV, - podpičje
;, ki je pogosto uporabljeno v evropskih nastavitvah preglednic, - tabulator
\t, - nova vrstica
\nali\r\nza konec vrstice.
| Del ukaza | Pomen | Primer |
|---|---|---|
FIELDS TERMINATED BY |
Določi ločilo med podatki v isti vrstici. | FIELDS TERMINATED BY ';' |
LINES TERMINATED BY |
Določi znak za konec vrstice. | LINES TERMINATED BY '\n' |
IGNORE 1 LINES |
Preskoči prvo vrstico datoteke. | IGNORE 1 LINES |
Primeri uvoza podatkov
V naslednjem primeru uvozimo podatke v tabelo drzave iz datoteke drzave.txt. Polja so ločena s podpičjem, vrstice pa z novo vrstico.
LOAD DATA LOCAL INFILE 'D:/vaje/drzave.txt'
INTO TABLE drzave
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n';
Če ima datoteka v prvi vrstici imena stolpcev, uporabimo IGNORE 1 LINES:
LOAD DATA LOCAL INFILE 'D:/vaje/drzave.txt'
INTO TABLE drzave
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
Primer za datoteko CSV
Če ima datoteka polja ločena z vejico, je primer lahko takšen:
LOAD DATA LOCAL INFILE 'D:/vaje/uporabniki.csv'
INTO TABLE uporabniki
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
Primer z določenimi stolpci
Če datoteka ne vsebuje vseh stolpcev ali so stolpci v datoteki v znanem vrstnem redu, lahko na koncu ukaza navedemo stolpce, v katere se podatki uvozijo.
LOAD DATA LOCAL INFILE 'D:/vaje/uporabniki.csv'
INTO TABLE uporabniki
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(uporabnisko_ime, email);
Pomni: Če ima tabela stolpec id z določilom AUTO_INCREMENT, ga pri uvozu pogosto ne navajamo, saj se vrednost lahko določi samodejno.
Primerjava načinov uvoza
Podatke lahko uvažamo na več načinov. Pri začetnem delu sta najpogostejša uvoz prek phpMyAdmin in uvoz z ukazom LOAD DATA.
| Način uvoza | Prednosti | Omejitve |
|---|---|---|
| phpMyAdmin | Grafični vmesnik, primeren za začetno učenje in manjše datoteke. | Pri večjih datotekah je lahko počasnejši ali omejen z nastavitvami strežnika. |
LOAD DATA |
Hiter uvoz večjega števila zapisov in natančen nadzor nad ločili. | Zahteva pravilno pot do datoteke in lahko zahteva dodatne varnostne nastavitve. |
Priporočila
- Pred uvozom preveri, ali ciljna tabela že obstaja.
- Preveri, ali se vrstni red podatkov v datoteki ujema s stolpci v tabeli.
- Pri datotekah s šumniki uporabi
CHARACTER SET utf8mb4. - Pravilno določi ločilo med polji, na primer
;ali,. - Če prva vrstica vsebuje naslove stolpcev, uporabi
IGNORE 1 LINES. - Pri večjih datotekah najprej preizkusi uvoz z nekaj vrsticami.
- Pred uvozom v pomembno tabelo naredi varnostno kopijo podatkov.
Pogoste napake
- Napačna pot do datoteke ali napačno ime datoteke.
- Datoteka ni dostopna strežniku ali odjemalcu.
- Napačno določeno ločilo med polji.
- Neujemanje števila stolpcev v datoteki in tabeli.
- Prva vrstica z naslovi stolpcev ni preskočena.
- Neustrezen nabor znakov, zaradi česar se šumniki prikažejo napačno.
- V datoteki so podatki, ki ne ustrezajo podatkovnim tipom stolpcev.
- Možnost
LOCAL INFILEje iz varnostnih razlogov onemogočena.
Uvoz z ukazom LOAD DATA LOCAL INFILE je lahko iz varnostnih razlogov onemogočen. V takem primeru lahko podatke uvozimo prek phpMyAdmin ali pa ustrezno prilagodimo nastavitve strežnika in odjemalca.