Обновить таблицу сразу в нескольких БД

Funaki

Полезный
Регистрация
26 Июн 2008
Сообщения
151
Реакции
16
Столкнулся с задачкой на MySQL: есть 500 одинаковых БД (разные имена db001..db500) в каждой бд есть таблица MANS c полем USERNAME, почти в каждой есть запись USERNAME='USER01' надо бы изменить на USERNAME='USER02'.
Всё вроде просто
PHP:
UPDATE db001.'MANS' SET USERNAME='USER02' WHERE USERNAME='USER01'
НО
Как бы это сделать одним махом для всех бд?
 
например сгенерировать кучу запросов
Код:
SELECT GROUP_CONCAT(z.sql_gen SEPARATOR ' ') sql_update FROM (
SELECT 1 AS id, CONCAT('UPDATE ', t.table_schema, ".MANS SET USERNAME='USER02' WHERE USERNAME='USER01';\n") sql_gen
FROM (
    SELECT table_schema
    FROM information_schema.tables
    WHERE table_schema LIKE 'db%'
    ORDER BY table_name DESC
) t
) z
GROUP BY z.id
;
и будет результат

Код:
UPDATE db001.MANS SET USERNAME='USER02' WHERE USERNAME='USER01';
UPDATE db003.MANS SET USERNAME='USER02' WHERE USERNAME='USER01';
UPDATE db002.MANS SET USERNAME='USER02' WHERE USERNAME='USER01';
...
который запустить,
ещё наверное в запросе можно как-то вставить PREPARE и EXECUTE, типа
Код:
PREPARE stmt FROM "SELECT 1";
EXECUTE stmt;
но не хватило терпения
 
не хватило терпения
и я поразмыслив/покрутив варианты пришёл к выводу, что одним update тут не справится хотя так хотелось information_schema.tables прикрутить
решил сделать полуручным методом накопировал простыню update db### и одним пуском обновить
 
Бедная БД. Ну я так понимаю это авторизация или что то подобное. Почему бы не вынести в отдельную таблицу или бд, чтобы не париться так каждый раз с синхронизацией. Зависимости никто не отменял)
 
а почему цикл на php не написать и пусть он уже в цикле апдейтит все таблицы...
 
Назад
Сверху