Příkazy DML
Vkládání nových záznamů
Nejprve je opět nutné prohlédnout si strukturu databázového modelu a vazby. Plníme nejprve takové relace, které nemají cizí klíče. Až teprve následně můžeme plnit relace, které se na ně odkazují.
Pro relace z logického schématu

tedy budeme nejprve vkládat záznamy do relace Znacky a teprve poté do relace Bus. Příkazy na vložení nových záznamů vypadají takto:
INSERT INTO Znacky (znacka, nazev, zeme) VALUES ("S", "Solaris", "PL");
INSERT INTO Znacky (znacka, nazev, zeme) VALUES ("M", "Mercedes Benz", "D");
INSERT INTO Bus (IDvozu, barva, znacka, datumNakupu)
VALUES (1, "W", "M", "2025-03-01"),
(2, "W", "S", "2023-11-20"),
(3, "G", "S", "2022-10-31");
Kdybychom se pokoušeli vložit nejprve záznamy do relace Bus, dostali bychom zpátky chybu 1452:
#1452 - Cannot add or update a child row: a foreign key constraint fails
To je důsledek fungování referenčního integritního omezení, které jsme si nastavili při vytváření relace Bus (podívejte se na příkaz na stránce DDL).
Změna existujících záznamů
Představme si, že starý autobus 3 již vyřadíme, ale z relace jej mazat nechceme, abychom měli ještě několik let evidenci o tom, že jsme daný autobus měli. Změníme tedy pouze hodnotu atributu datumVyrazeni:
UPDATE Bus SET datumVyrazeni = "2025-09-22" WHERE IDVozu = 3;
Pojďme si příkaz opět trochu rozebrat:
- UPDATE = příkaz pro změnu existujících záznamů
- Bus = název relace, ve které budeme měnit záznamy
- SET = příkaz pro nastavení nové hodnoty atributů
- datumVyrazeni = název atributu, jehož hodnotu/y budeme měnit
- „2025-09-22“ = nová hodnota (typ DATE)
- WHERE = začátek restrikce, tj. části, která specifikuje které všechny záznamy budeme měnit
- IDVozu = 3 = budeme měnit pouze záznam s IDVozu 3 (čili pouze jeden záznam)
POZOR! Kdybychom zapomněli na restrikci, proběhla by změna hodnot atributu datumVyrazeni u všech existujících záznamů.
Výmaz existujících záznamů
Smazání existujícího záznamu z relace provádíme pomocí příkazu DELETE. Opět nezapomeneme na restrikci, jinak bychom smazali všechny záznamy z relace, a to většinou nechceme. Pozor také na dodržení referenční integrity, tj. nemohu například smazat záznam „S“ z relace Znacky, jestliže existuje záznam v relaci Bus, který tuto značku využívá.
Pojďme tedy zkusit smazat značku „S“ a uvidíme, co nám SŘBD odpoví:
DELETE FROM Znacky WHERE znacka = "S";
#1451 - Cannot delete or update a parent row: a foreign key constraint fails
Abychom mohli smazat značku „S“, museli bychom nejprve smazat všechny záznamy z relace Bus, které tuto značku využívají.
DELETE FROM Bus WHERE znacka = "S";
Teď už tedy v relaci Bus máme pouze jeden autobus. Nyní již původní příkaz bude možný:
DELETE FROM Bus WHERE znacka = "S";