Tato stránka vysvětluje, jak aktualizovat existující data v databázi MySQL.
Takže jsme již přidali data do naší databáze. Nyní si ale uvědomujeme, že naše data obsahují chybu. Jablkům bylo přiřazeno
UnitId
z 1
— ale toto by mělo být 2
.
Můžete to vidět zde:
![](http://www.sqldat.com/article/uploadfiles/202205/2022051111572014.png)
Žádný problém. Tento záznam pouze aktualizujeme.
Položka UPDATE
Prohlášení
SQL UPDATE
výpis nám umožňuje aktualizovat údaje v naší databázi. Tento příkaz můžeme použít ke změně ID jednotky z 1
až 2
. K tomu používáme WHERE
klauzule k určení přesného záznamu, který potřebujeme aktualizovat. Takhle:
UPDATE Fruit SET UnitId = 2 WHERE FruitId = 1;
Obecně je vhodné při provádění UPDATE
operaci, zadejte pole ID záznamu, který se pokoušíte aktualizovat (nebo jakýkoli jeho primární klíč). To pomáhá chránit před náhodnou aktualizací nesprávných záznamů. V tomto příkladu jsme věděli, že jablka mají FruitId
z 1
. Ale nemusíte vždy znát ID záznamu, který se pokoušíte aktualizovat. V tom případě můžete udělat něco takového:
UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple' AND UnitId = 1;
Na kterýkoli z nich můžeme navázat pomocí SELECT
a zde je výsledek:
![](http://www.sqldat.com/article/uploadfiles/202205/2022051111572074.png)
Všimněte si, že DateUpdated sloupec byl také aktualizován, i když jsme pro tento sloupec nespecifikovali aktualizaci. Je to proto, že když jsme vytvořili tabulku, nastavili jsme, aby se sloupec aktualizoval aktuálním datem/časem pokaždé, když došlo k aktualizaci záznamu.
Zde je kód, který jsme použili při vytváření tohoto sloupce:
DateUpdated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Konkrétněji je to ON UPDATE CURRENT_TIMESTAMP
to vedlo k aktualizaci sloupce právě teď, když jsme spustili UPDATE
prohlášení.
Bezpečné aktualizace
Mohli jsme stejně snadno vytvořit náš UPDATE
příkaz takto (bez AND UnitId = 1
):
UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple';
Pokud se však o to pokusíte, můžete narazit na následující chybu:
![](http://www.sqldat.com/article/uploadfiles/202205/2022051111572016.png)
Režim bezpečných aktualizací
Pokud narazíte na výše uvedenou chybu, je to proto, že vaše připojení MySQL běží v režimu bezpečných aktualizací. To nám pomáhá zabránit náhodnému přepsání velkého množství dat. Ve skutečnosti, kdybychom zapomněli zahrnout WHERE
klauzuli bychom aktualizovali každý jednotlivý záznam v tabulce!
Ano, spuštěním následujícího kódu bude každý záznam v naší tabulce aktualizován na Banán :
UPDATE Fruit SET FruitName = 'Banana'
Spuštění v režimu Safe Updates tedy přináší skutečnou výhodu.
Pokud však opravdu potřebujete provést tento dotaz (nebo pokud se všechno vaše ovoce skutečně změnilo na banány), můžete provést jednu z následujících akcí:
- Upravte svůj dotaz tak, aby obsahoval
KEY
sloupec. Udělali jsme to v příkladech v horní části této stránky. - Zakažte režim bezpečných aktualizací.
Zakázat režim bezpečných aktualizací
Pokud zjistíte, že potřebujete provést UPDATE
operace bez použití KEY
můžete vždy vypnout režim bezpečných aktualizací.
Chcete-li zakázat režim bezpečných aktualizací, spusťte před spuštěním UPDATE
následující příkaz prohlášení:
set sql_safe_updates = 0;
Po dokončení je vždy dobré nastavení obnovit do předchozího stavu – zvláště u nastavení, která by mohla mít široký dopad, jako je toto.
Chcete-li povolit režim bezpečných aktualizací, spusťte následující:
set sql_safe_updates = 1;
Ve skutečnosti byste mohli spouštět vše najednou, například takto:
set sql_safe_updates = 0; UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple'; select * from Fruit; set sql_safe_updates = 1;
Aktualizovat více polí
Více polí můžete aktualizovat tak, že každé přiřazení polí oddělíte čárkou. Takhle:
UPDATE Fruit SET FruitName = 'Red Grapes', Inventory = '11' WHERE FruitId = 5;
Výsledek:
![](http://www.sqldat.com/article/uploadfiles/202205/2022051111572021.png)