Načrtovanje in razvoj spletnih aplikacij

Uvoz podatkov - LOAD DATA

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:

  • INFILE določa datoteko, iz katere uvažamo podatke,
  • INTO TABLE določa tabelo, v katero uvažamo podatke,
  • CHARACTER SET določa nabor znakov,
  • FIELDS TERMINATED BY določa ločilo med polji,
  • LINES TERMINATED BY določa ločilo med vrsticami,
  • IGNORE 1 LINES preskoč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 \n ali \r\n za 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 INFILE je 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.