Vkládání a úprava záznamů v MySQL je snadná věc, ale trochu se komplikuje v okamžiku, kdy nevíte jestli chcete provést INSERT nebo UPDATE.
Mějme tabulku, která bude obsahovat dva sloupce ID (cizí klíč, tj. odkaz do jiné tabulky) a Status, který obsahuje informaci o stavu předmětu. Tabulku vytvoříme snadno pomocí tohoto SQL kódu:
CREATE TABLE `table_replace` (
`ID` int(11) NOT NULL,
`Status` int(11) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci
Data do tabulky vložíme snadno:
INSERT INTO `table_replace` (`ID`, `Status`)
VALUES ('1', '0'), ('2', '1'), ('3', '0'),
('5', '2'), ('6', '1')
Tím získáme tabulku:
ID | Status |
1 | 0 |
2 | 1 |
3 | 0 |
5 | 2 |
6 | 1 |
Ke změně hodnoty řádku slouží příkaz UPDATE, např.:
UPDATE `table_replace` SET `Status` = '2' WHERE `ID` = 2;
Komplikace nastává v okamžiku, kdy nemáme jistotu, jestli už řádek s příslušným ID v tabulce existuje nebo ne. Pokud by existoval, musíme použít UPDATE, jinak INSERT. To se dá samozřejmě udělat oklikou, kdy si nejprve dotazem zjistíme, jestli je ID již v tabulce. Tím se ale kód znepřehledňuje a celý skript zpomaluje.
Lepší bude využít příkaz REPLACE, který, pokud to bude možné, vytvoří nový řádek, např. tímto kódem:
REPLACE INTO `table_replace` VALUES (8, 2)
Takto vložíme nový řádek s ID 8 a hodnotou sloupce Status 2. Pokud, ale zkusíme tento kód:
REPLACE INTO `table_replace` VALUES (2, 1)
Pokus o vytvoření řádku s hodnotou ID 2 selže, protože sloupec ID je primárním klíčem a hodnotu 2 už obsahuje, proto dojde k updatu a nová tabulka bude vypadat takto:
ID | Status |
1 | 0 |
2 | 1 |
3 | 0 |
5 | 2 |
6 | 1 |
8 | 2 |
I když příkaz REPLACE není tak notoricky známý, jako jiné, je v některých případech velmi užitečný a může zpřehlednit kód a zrychlit celou aplikaci.