0

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

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 回答