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