Načrtovanje in razvoj spletnih aplikacij

Vstavljanje podatkov - INSERT

Stavek INSERT uporabljamo za dodajanje novih zapisov v tabelo. Z njim lahko vstavimo eno vrstico, več vrstic hkrati ali pa podatke prenesemo iz druge tabele.

Pri vstavljanju podatkov moramo paziti, da se vrednosti ujemajo s stolpci v tabeli. To pomeni, da mora biti število vrednosti pravilno, podatkovni tipi pa morajo ustrezati podatkom, ki jih želimo shraniti.

Pomni: Stavek INSERT doda nov zapis v tabelo. Obstoječih zapisov ne spreminja, ampak v tabelo vstavi novo vrstico.

Pri stavku INSERT je priporočljivo izrecno navesti stolpce, v katere vstavljamo podatke. Tako je ukaz preglednejši in manj odvisen od vrstnega reda stolpcev v tabeli.

Vsebina strani

Osnovna pravila

Stavek INSERT je namenjen dodajanju novih vrstic. Pri tem moramo vedeti, v katero tabelo vstavljamo podatke in katere vrednosti želimo zapisati.

  • INSERT INTO določa tabelo, v katero vstavljamo podatke.
  • VALUES določa vrednosti, ki jih želimo vstaviti.
  • Besedilne vrednosti zapišemo med enojne narekovaje, na primer 'Slovenija'.
  • Številske vrednosti običajno zapišemo brez narekovajev.
  • Če navedemo seznam stolpcev, morajo biti vrednosti zapisane v istem vrstnem redu.
  • Če stolpec uporablja AUTO_INCREMENT, njegove vrednosti običajno ne vnašamo ročno.

Pozor: Pri stavku INSERT se mora število navedenih stolpcev ujemati s številom navedenih vrednosti. Vrednosti morajo biti zapisane v enakem vrstnem redu kot stolpci.

Osnovna sintaksa stavka INSERT

Najpreprostejša oblika stavka INSERT je:

INSERT INTO ime_tabele
VALUES (vrednost_1, vrednost_2, ..., vrednost_n);

Pri tej obliki moramo vnesti vrednosti za vse stolpce tabele in to v pravilnem vrstnem redu. Tak zapis je lahko manj pregleden, ker ni takoj razvidno, katera vrednost pripada kateremu stolpcu.

Primer:

INSERT INTO drzave
VALUES (207, 'Slovenija', 'SLO', 100, 700, 0);

Beseda INTO pri stavku INSERT ni vedno nujna, vendar jo običajno pišemo, ker je ukaz tako bolj pregleden in lažje berljiv.

Vnos samo izbranih stolpcev

Pogosto ne želimo vstaviti vrednosti za vse stolpce. Takrat je bolje, da seznam stolpcev napišemo izrecno:

INSERT INTO ime_tabele (stolpec_1, stolpec_2, ..., stolpec_n)
VALUES (vrednost_1, vrednost_2, ..., vrednost_n);

Primer:

INSERT INTO drzave (st, drzava)
VALUES (208, 'Hrvaška');

Preostali stolpci morajo v takem primeru dovoljevati vrednost NULL ali pa imeti določeno privzeto vrednost.

Pomni: Izrecno navajanje stolpcev je priporočljivo, ker je ukaz bolj razumljiv. Poleg tega se poizvedba ne pokvari tako hitro, če se pozneje spremeni vrstni red stolpcev v tabeli.

Vnos več vrstic hkrati

Z ukazom INSERT lahko vnesemo tudi več vrstic naenkrat. To je uporabno, kadar želimo dodati več sorodnih zapisov.

INSERT INTO ime_tabele (stolpec_1, stolpec_2, ..., stolpec_n)
VALUES (vrednost_1A, vrednost_2A, ..., vrednost_nA),
       (vrednost_1B, vrednost_2B, ..., vrednost_nB),
       ...,
       (vrednost_1M, vrednost_2M, ..., vrednost_nM);

Primer:

INSERT INTO drzave (st, drzava)
VALUES (209, 'Avstrija'),
       (210, 'Italija');

Tak način je običajno preglednejši in učinkovitejši kot več zaporednih ločenih ukazov INSERT, kadar vstavljamo več zapisov z enako zgradbo.

Privzete vrednosti

Če ima tabela za nekatere stolpce določene privzete vrednosti, lahko za te stolpce vrednosti izpustimo. Podatkovna baza nato uporabi privzete vrednosti ali vrednost NULL, če je ta dovoljena.

V nekaterih primerih lahko uporabimo tudi prazno obliko:

INSERT INTO ime_tabele ()
VALUES ();

Primer:

INSERT INTO drzave ()
VALUES ();

Tak ukaz vstavi vrstico s privzetimi vrednostmi oziroma z vrednostmi NULL, kjer je to dovoljeno. Če obvezni stolpci nimajo privzetih vrednosti, se ukaz ne more pravilno izvesti.

Pozor: Prazna oblika stavka INSERT je smiselna samo, če tabela omogoča privzete vrednosti za vse potrebne stolpce. Pri obveznih stolpcih brez privzete vrednosti bo prišlo do napake.

Povezava stavkov INSERT in SELECT

Zelo uporabna je tudi povezava med stavkoma INSERT in SELECT. Tako lahko podatke iz ene tabele prenesemo v drugo.

INSERT INTO ime_tabele
SELECT ...;

ali

INSERT INTO ime_tabele (stolpec_1, stolpec_2, ..., stolpec_n)
SELECT ...;

Prvo obliko uporabimo, kadar vstavljamo vse stolpce. Drugo obliko uporabimo, kadar želimo vstaviti samo določene stolpce ali kadar želimo imeti poizvedbo bolj pregledno.

Primer:

INSERT INTO arhiv_drzav (st, drzava)
SELECT st, drzava
FROM drzave;

V tem primeru se iz tabele drzave preberejo stolpci st in drzava, nato pa se podatki vstavijo v tabelo arhiv_drzav.

Primerjava oblik stavka INSERT

Stavek INSERT lahko zapišemo na več načinov. Izbira oblike je odvisna od tega, ali vstavljamo vse stolpce, samo izbrane stolpce, več vrstic ali podatke iz druge tabele.

Oblika Namen Primer
INSERT INTO ... VALUES Vstavljanje ene vrstice z vrednostmi za vse stolpce. INSERT INTO drzave VALUES (...);
INSERT INTO ... (stolpci) VALUES Vstavljanje vrednosti samo v izbrane stolpce. INSERT INTO drzave (st, drzava) VALUES (...);
več vrednosti v VALUES Vstavljanje več vrstic z enim ukazom. VALUES (...), (...);
INSERT INTO ... SELECT Prenos podatkov iz ene tabele v drugo. INSERT INTO arhiv_drzav SELECT ...;

Priporočila

  • Pri vstavljanju podatkov praviloma navedi seznam stolpcev.
  • Besedilne vrednosti zapisuj med enojne narekovaje.
  • Pri stolpcu z AUTO_INCREMENT vrednosti običajno ne vnašaj ročno.
  • Pred vstavljanjem preveri, kateri stolpci so označeni z NOT NULL.
  • Za več sorodnih zapisov uporabi en ukaz INSERT z več vrsticami vrednosti.
  • Za prenos podatkov med tabelami uporabi povezavo INSERT INTO ... SELECT.
  • Pri pomembnih podatkih pred večjim vnosom preveri zgradbo tabele.

Pogoste napake

  • Število vrednosti se ne ujema s številom stolpcev.
  • Vrednosti niso zapisane v enakem vrstnem redu kot stolpci.
  • Besedilne vrednosti niso zapisane med enojnimi narekovaji.
  • V stolpec z obvezno vrednostjo se ne vstavi nobena vrednost.
  • Vrednost ne ustreza podatkovnemu tipu stolpca.
  • Ročno vnašanje vrednosti v stolpec, ki uporablja AUTO_INCREMENT.
  • Pri prenosu podatkov z INSERT INTO ... SELECT se stolpci obeh delov ne ujemajo.

Pri stavku INSERT moramo paziti, da se število stolpcev ujema s številom podanih vrednosti. Prav tako morajo biti vrednosti zapisane v pravilnem vrstnem redu ali pa moramo jasno navesti seznam stolpcev.