MySQL – příkaz Replace

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:

IDStatus
10
21
30
52
61

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:

IDStatus
10
21
30
52
61
82

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.

Odkazy

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.