Přeskočit na obsah

Insert (SQL)

Z Wikipedie, otevřené encyklopedie

SQL příkaz INSERT přidá do tabulky relační databáze nový záznam.

Základní forma

Základní forma příkazu INSERT vypadá takto:

 
 INSERT INTO <tabulka> [(<sloupec>[,...n])] VALUES (<hodnota>[,...n])
 
INSERT INTO <tabulka> [(<sloupec>[,...n])] <SELECT prikaz>
  • <tabulka> - Název tabulky, do které se má nový záznam uložit.
  • <sloupec> - Jmenovitý seznam sloupců, do kterých se hodnoty ukládají.
  • <hodnota> - Vkládaná hodnota. Každá hodnota se uloží do sloupce jež má stejnou pozici ve výčtu sloupců jako tato hodnota.
  • <SELECT prikaz> - Vytvoří sadu výsledků která bude vložena do uvedené tabulky.

Počet sloupců a hodnot musí být stejný. Pokud není sloupeček zadán (tzn. že jméno sloupce není uvedeno v seznamu sloupců), použije se implicitní hodnota. Tato implicitní hodnota se definuje společně s definicí tabulky.

Hodnoty zadané při INSERT dotazu musí splňovat všechny podmínky pro sloupce (např. primární klíč, podmínky CHECK a NOT NULL). Pokud nastane syntaktická chyba, záznam se do tabulky nepřidá.

Příklady

Příklad 1

Obsah tabulky telefonni_seznam před vložením nového záznamu

jmeno cislo ulice mesto
Jan Novák 257125474 Wikipedistická 28 Pastoriovice
Jana Nováková 574125474 Luční 6 Praha
  
 INSERT INTO telefonni_seznam (jmeno, cislo) VALUES ('John Doe', '555-1212');

Obsah tabulky telefonni_seznam po vložení nového záznamu

jmeno cislo ulice mesto
Jan Novák 257125474 Wikipedistická 28 Pastoriovice
Jana Nováková 574125474 Luční 6 Praha
John Doe 555-1212 NULL NULL

Pokud jsou zadány hodnoty všech sloupečků, můžeme použít zkrácenou verzi:

 
 INSERT INTO ''tabulka'' VALUES (''hodnota1'', [''hodnota2, ...''])
Příklad 2
 
 INSERT INTO telefonni_seznam VALUES ('John Doe', '555-1212', 'Pařížská 6','Aš');
jmeno cislo ulice mesto
Jan Novák 257125474 Wikipedistická 28 Pastoriovice
Jana Nováková 574125474 Luční 6 Praha
John Doe 555-1212 Pařížská 6

Rozšířené formy

Vložení více záznamů

Některé databáze povolují vložení více záznamů za sebou. V takovém případě se hodnoty pro druhý, třetí… další záznam vloží za ty první a oddělí čárkou.

 
 INSERT INTO telefonni_seznam (jmeno, cislo) VALUES ('John Doe', '555-1212'), ('Leona Lewis', '555-112777'), ('Joe King', '555-1213');

REPLACE INTO

Některé databáze (MySQL, ProgreSQL, …) mají SQL příkaz, který kombinuje příkazy INSERT a UPDATE – tedy: pokud záznam existuje, aktualizuje jeho data, a pokud ne, vloží jej jako kdyby byl volán prostý INSERT INTO…

REPLACE INTO není zahrnuto ve standardech SQL-92 nebo SQL-99, je na něj nahlíženo jako na „bonus“, s kterým se při případné migraci na jinou databázi nemusí nutně počítat.

Další vlastnosti

Výchozí hodnoty

Většina relačních databází u definice tabulkového pole umožňuje stanovit výchozí (implicitní, defaultní) hodnotu. Pokud při vkládání dané políčko nespecifikujeme, vloží se do něj automaticky tato implicitní hodnota. Stejný efekt bude mít, pokud jako hodnotu použijeme klíčové slovo DEFAULT, které výchozí hodnotu pro daný sloupec reprezentuje.

Automatická čísla

Relační databáze taktéž povolují vytvoření primárního indexu (primárního klíče) tabulky, jehož hodnota je určována nezávisle na explicitně vložené hodnotě (např. v MS Access, MSSQL se jedná o speciální typ automatické číslo a při vložení nového záznamu se toto pole musí vynechat, v MySQL má pole příznak AUTO_INCREMENT a při vložení se místo něj může specifikovat např. prázdný řetězec nebo DEFAULT).

Duplicitní hodnoty

Spolu s tabulkami mohou být vytvořeny její tzv. unikátní indexy – de facto mechanismus, který vyloučí, aby pro určité pole v tabulce existovaly duplicitní hodnoty (tím, že v případě pokusu o vložení takového záznamu databázový stroj ohlásí chybu).

Související odkazy