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