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

Nahraďte všechna pole v MySQL

Pomocí následujícího dotazu SQL vygenerujte dotazy SQL, které potřebujete k nahrazení hodnoty ve všech sloupcích.

select concat(
       'UPDATE my_table SET ',
       column_name,
       ' = REPLACE(', column_name, ', ''a'', ''e'');')
from information_schema.columns
where table_name = 'my_table';

Po provedení tohoto SQL dotazu jednoduše spusťte všechny dotazy, abyste nahradili všechny hodnoty.

Po chvíli googlování netestováno

Vytvořte uloženou proceduru s takovým jádrem. Může přijmout název tabulky, hodnotu, kterou chcete najít, a hodnotu, kterou chcete nahradit.

Hlavní myšlenkou je použít:

  1. připravené příkazy pro dynamické provádění SQL;
  2. kurzory pro iteraci přes všechny sloupce tabulky.

Viz částečný kód (netestováno) níže.

DECLARE done INT DEFAULT 0;
DECLARE cur1 CURSOR FOR
    SELECT column_name FROM information_schema.columns
    WHERE table_name = 'my_table';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN cur1;
REPEAT
    SET s = concat(
       'UPDATE my_table SET ',
       column_name,
       ' = REPLACE(', column_name, ', ''a'', ''e'');');
    PREPARE stmt2 FROM s;
    EXECUTE stmt2;
    FETCH cur1 INTO a;
UNTIL done END REPEAT;
CLOSE cur1;


  1. Jak mohu použít datový typ data na serveru SQL?

  2. Proč by podmínka IN byla pomalejší než =v sql?

  3. mysql vlastní globální definovaná proměnná

  4. Docker MYSQL '[2002] Připojení odmítnuto'