在同一台服务器上,我有大约30个站点,30个站点的DB具有相同的结构,现在我想更新一个表:tx_tip
(30个DB上的相同表名)。而不是使用phpmyadmin逐个更新,有没有办法可以使用mysql命令一起更新所有数据库?
答案 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
表的所有数据库的名称,为您构造并执行更新语句。