如何一起更新几个MySQL数据库?

时间:2013-08-06 02:01:40

标签: mysql phpmyadmin

在同一台服务器上,我有大约30个站点,30个站点的DB具有相同的结构,现在我想更新一个表:tx_tip(30个DB上的相同表名)。而不是使用phpmyadmin逐个更新,有没有办法可以使用mysql命令一起更新所有数据库?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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表的所有数据库的名称,为您构造并执行更新语句。