@WebforSelf

Как заменить слово во всех таблицах mysql?

Есть задача заменить одно слово на другое во всей БД
Таблиц ориентировочно 200 и не во всех это слово имеется, также может быть в разных полях.

UPDATE `table` SET `column` = REPLACE( column, 'search', 'replace' ) ;


Конструкция обновления по полю в каждой таблице, очень запутанная. Возможно как то сразу чтоб это слово везде заменилось?

Пока вариант рассматриваю такой, открыть базу через notepad++ и в тексте найти и заменить, но проблема в том что база весит около 200 мб.
  • Вопрос задан
  • 1432 просмотра
Пригласить эксперта
Ответы на вопрос 1
@galaxy
Простого пути нет. Самый правильный - UPDATE.
Можно автоматически сгенерировать скрипт для изменения всех колонок текстового типа, примерно так:
use information_schema

select concat_ws(' ', 'update', table_name, 'set', column_name, '= replace(', column_name, ', ''search'', ''replace'' );')
  from columns
 where table_schema = 'mysql'
   and (data_type = 'varchar' or data_type like '%text');


(заменить table_schema = 'mysql' на нужную вам базу)

+------------------------------------------------------------------------------------------------------------------------+
| concat_ws(' ', 'update', TABLE_NAME, 'set', COLUMN_NAME, '= REPLACE(', COLUMN_NAME, ', ''search'', ''replace'' );')    |
+------------------------------------------------------------------------------------------------------------------------+
| update component set component_urn = REPLACE( component_urn , 'search', 'replace' );                                   |
| update engine_cost set comment = REPLACE( comment , 'search', 'replace' );                                             |
| update engine_cost set cost_name = REPLACE( cost_name , 'search', 'replace' );                                         |
| update engine_cost set engine_name = REPLACE( engine_name , 'search', 'replace' );                                     |
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы