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

Тема в разделе "Базы данных", создана пользователем Funaki, 25 окт 2011.

Модераторы: latteo
  1. Funaki

    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'
    НО
    Как бы это сделать одним махом для всех бд?
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    например сгенерировать кучу запросов
    Код:
    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;
    
    но не хватило терпения
     
    Funaki нравится это.
  3. Funaki

    Funaki

    Регистр.:
    26 июн 2008
    Сообщения:
    151
    Симпатии:
    16
    и я поразмыслив/покрутив варианты пришёл к выводу, что одним update тут не справится хотя так хотелось information_schema.tables прикрутить
    решил сделать полуручным методом накопировал простыню update db### и одним пуском обновить
     
  4. dvd_xaker

    dvd_xaker Постоялец

    Регистр.:
    27 сен 2011
    Сообщения:
    132
    Симпатии:
    14
    Бедная БД. Ну я так понимаю это авторизация или что то подобное. Почему бы не вынести в отдельную таблицу или бд, чтобы не париться так каждый раз с синхронизацией. Зависимости никто не отменял)
     
  5. HEPB

    HEPB Постоялец

    Регистр.:
    24 июн 2009
    Сообщения:
    111
    Симпатии:
    8
    а почему цикл на php не написать и пусть он уже в цикле апдейтит все таблицы...