0

同じサーバーに約 30 のサイトがあり、30 のサイトの DB は同じ構造を持っています。テーブルを更新したいと思います: tx_tip(30 の DB で同じテーブル名)。phpmyadmin を使用して 1 つずつ更新する代わりに、mysql コマンドを使用してすべての DB をまとめて更新する方法はありますか?

4

2 に答える 2

2

JOIN を使用して複数のテーブルを更新できます。テーブルが異なるデータベースにある場合は、クエリにデータベース プレフィックスを入力する必要があります。

UPDATE db1.tx_tip t1
JOIN db2.tx_tip t2
JOIN db3.tx_tip t3
...
SET t1.col = new_val,
    t2.col = new_val,
    t3.col = new_val,
WHERE <condition>
于 2013-08-06T02:15:39.857 に答える
0

このテーブルを定期的に維持する場合は、次のような単純なストアド プロシージャを作成することを検討してください。

DELIMITER $$
CREATE PROCEDURE sp_update_tx_tip(IN p_id INT, IN p_new_value VARCHAR(128))
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE db_name VARCHAR(64);
  DECLARE cur CURSOR FOR 
   SELECT TABLE_SCHEMA 
     FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME = 'tx_tip';
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

  OPEN cur;

  SET @id = p_id, @new_value = p_new_value;

  read_loop: LOOP
    FETCH cur INTO db_name;
    IF done THEN LEAVE read_loop; END IF;
    SET @sql = CONCAT('UPDATE ', db_name, '.tx_tip t SET t.value = ? WHERE t.id = ?');
    PREPARE stmt FROM @sql;
    EXECUTE stmt USING @new_value, @id;
    DEALLOCATE PREPARE stmt;
  END LOOP;

  CLOSE cur;
END$$
DELIMITER ;

そして、それを次のように使用します

CALL sp_update_tx_tip(1, 'new value');  

tx_tipからテーブルを持つすべてのデータベースの名前を取得しINFORMATION_SCHEMA.TABLES、更新ステートメントを構築して実行します。

于 2013-08-06T02:46:29.043 に答える