如何在MySQL中批量更新WordPress多站点所有postmeta表的meta_value字段
WordPress多站点批量更新postmeta表字段方案
方法一:生成批量UPDATE语句手动执行
先运行以下SQL查询,生成所有需要执行的更新语句:
SELECT CONCAT( 'UPDATE ', table_name, ' SET meta_value = CONCAT(meta_value, '' [cf7ic]'') WHERE meta_value LIKE ''% \\"Your Name\\"%'' AND meta_key = ''_form'';' ) AS update_queries FROM information_schema.tables WHERE table_name LIKE 'wpsite_%_postmeta';
将查询结果中输出的所有SQL语句复制出来,一次性执行即可完成批量更新。
方法二:用MySQL存储过程自动循环执行
创建并调用存储过程来自动遍历所有目标表执行更新:
DELIMITER // CREATE PROCEDURE BatchUpdatePostmeta() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE tbl_name VARCHAR(255); DECLARE cur CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_name LIKE 'wpsite_%_postmeta'; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur; read_loop: LOOP FETCH cur INTO tbl_name; IF done THEN LEAVE read_loop; END IF; SET @sql = CONCAT( 'UPDATE ', tbl_name, ' SET meta_value = CONCAT(meta_value, '' [cf7ic]'') WHERE meta_value LIKE ''% \\"Your Name\\"%'' AND meta_key = ''_form'';' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END LOOP; CLOSE cur; END // DELIMITER ; -- 执行批量更新 CALL BatchUpdatePostmeta(); -- 可选:执行完成后删除存储过程 DROP PROCEDURE IF EXISTS BatchUpdatePostmeta;
注意事项
- 操作前必须备份数据库,防止数据意外丢失
- 确认
wpsite_%_postmeta的匹配规则准确覆盖所有需要更新的表 - 建议先在测试环境或单个表验证SQL逻辑,确认效果后再批量执行
内容的提问来源于stack exchange,提问作者Firmi9
相关产品推荐
相关产品推荐

