sql >> Database teknologi >  >> RDS >> Mysql

Erstat alle felter i MySQL

Brug følgende SQL-forespørgsel til at generere de SQL-forespørgsler, som du skal bruge for at erstatte en værdi i alle kolonner.

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

Efter at have udført denne SQL-forespørgsel, skal du blot køre alle forespørgsler for at erstatte alle værdier.

Utestet efter lidt google

Opret en lagret procedure med en kerne som denne. Den kan acceptere navnet på tabellen, den værdi, der skal findes, og den værdi, der skal erstattes.

Hovedideen er at bruge:

  1. forberedte sætninger til dynamisk SQL-udførelse;
  2. markører til at iterere over alle kolonner i en tabel.

Se delvis kode (ikke-testet) nedenfor.

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. Du kan ikke angive måltabel for opdatering i FROM-klausulen

  2. MySql-bitkolonner returnerer et mærkeligt stort tal i PHP 7.1 (ikke i tidligere versioner)

  3. MySQL tilføjer dage til en dato

  4. Hvordan caster jeg json-array til tekst-array?