MS Access - Příkaz INSERT

24. 12. 2012, Vladimír Klaus, přečteno 5670x

MS Access
SQL

Tento příkaz slouží ke vkládání nových údajů do tabulky. Nejprve zadáme, do jaké tabulky budeme přidávat, pak uvedeme sloupce (nemusí být všechny) a následují hodnoty sloupců.

INSERT INTO Zakaznici
(Prijmeni, Jmeno, Telefon) VALUES ("Kolbaba", "Michal", "789 789 789")

Nezadané údaje budu NULL nebo budou mít nějakou výchozí hodnotu, která může být zadána v definici databázové tabulky.

SQL obrázek

Příkaz je také možné zadat bez specifikace sloupců – jen zadáním hodnot. Ale takhle to nepůjde – počet hodnot musí být stejný, jako je počet sloupců v tabulce a hodnoty musí být uvedeny ve stejném pořadí, jako jsou nadefinovány sloupce.

INSERT INTO Zakaznici VALUES ("Kolbaba", "Michal", "789 789 789")

Doplníme tedy všechny údaje, jen asi budete váhat nad ID. Je to pole, které databáze přiřazuje automaticky a s každým vloženým záznamem zvyšuje o 1. Některé systémy umožňují použít hodnotu NULL, čímž to opět nechají na databázi, aby si správnou hodnotu stanovila sama. MS Access ale tuto hodnotu vyžaduje. Když zadáme již nějakou existující hodnotu, dojde ke konfliktu, takže je nutné zadat hodnotu neexistující, nejlépe  o 1 vyšší, než je nevětší ID v tabulce.

INSERT INTO Zakaznici
VALUES (50, "Doubrava", "Jiří", "", Plzeň, "123 456 789")

Jenže to většinou nevíme, takže co s tím? Tento zápis vůbec nepoužívat a vždy raději vyjmenovat sloupce, které nastavujete.

Některé databáze umí vkládat více sad záznamů najednou, MS Access toto ale neumí.

INSERT INTO Zakaznici (Prijmeni, Jmeno, Telefon)
VALUES
("Kolbaba", "Michal", "789 789 789"),
("Doubrava", "Jiří", "123 456 789"),
("Okurková", "Karolína", "")

Tedy ono je možné vložit více sad záznamů najednou, ale ty musí být v tabulce, resp. výsledkem nějakého dotazu. V tomto případě vytvoříme pro každého zákazníka jednu objednávku produktu 1 a ještě nastavíme aktuální datum.

INSERT INTO Objednavky (IdZakaznika, IdProduktu, Datum)
SELECT ID, 1, Date() FROM Zakaznici

SQL obrázek

Ještě drobná poznámka týkající se nastavení ID. Pokud nám systém dovolí tuto hodnotu nastavit, dá se to využít k nastavení nové startovní hodnoty pro počítadlo, které hodnotu generuje. Řekněme, že potřebujeme, aby nově přidávané objednávky dostávaly ID počínaje 100. Vložíme tedy fiktivní objednávku s ID = 99 a hned ji zase smažeme.

INSERT INTO Objednavky (Id) VALUES (99)

DELETE Objednavky WHERE Id = 99

Příště vložená objednávka bude mít ID = 100, další 101 atd.

Viz též příklady na konci části Příkaz CREATE TABLE.