Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ersetzen Sie alle Felder in MySQL

Verwenden Sie die folgende SQL-Abfrage, um die SQL-Abfragen zu generieren, die Sie zum Ersetzen eines Werts in allen Spalten benötigen.

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

Führen Sie nach dem Ausführen dieser SQL-Abfrage einfach alle Abfragen aus, um alle Werte zu ersetzen.

Ungetestet nach einigem Googeln

Erstellen Sie eine gespeicherte Prozedur mit einem Kern wie diesem. Es kann den Namen der Tabelle, den zu suchenden Wert und den zu ersetzenden Wert akzeptieren.

Die Hauptidee ist die Verwendung von:

  1. vorbereitete Anweisungen für die dynamische SQL-Ausführung;
  2. Cursor zum Durchlaufen aller Spalten einer Tabelle.

Siehe Teilcode (ungetestet) unten.

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;