sql >> Databáze >  >> RDS >> Mysql

Aktualizujte data v databázi MySQL

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:

Žá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 12 . 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:

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:

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:


  1. Další z mých oblíbených PostgreSQL dotazů – a proč na nich také záleží

  2. Distribuovanou transakci nelze zahájit

  3. Jak mohu pracovat s vysoce přesnými desetinnými místy v PHP

  4. Potíže se znaky UTF-8; co vidím, není to, co jsem uložil