MySQL 在结果集中搜索和替换(更改 WordPress table 前缀后)

MySQL search and replace in result set (after changing WordPress table prefixes)

WordPress 正在保存大量有关用户和设置的信息,包括 table 名称。如果您必须更改 WordPress table 前缀(例如,如果两个 WordPress 安装使用相同的数据库,这可能是必要的),这将非常烦人。

你必须更新 wp_options table 中的很多键,它们是这样收集的:

SELECT * FROM `myprefix_options` WHERE `option_name` LIKE '%wp_%'

您还必须更新 wp_usermeta table 中的许多键,这些键是这样收集的:

SELECT * FROM `myprefix_usermeta` WHERE `meta_key` LIKE '%wp_%'

因此此处显示的查询将提供给定的结果。现在我正在搜索以下高级查询:

对于(select 查询的结果集)中的每个结果,将 meta_key 的值替换为新的前缀元键。

示例:

[umeta_id][user_id][meta_key][meta_value]
1|1|oldprefix_foo|whatever 
2|2|oldprefix_bar|abc

应该变成:

[umeta_id][user_id][meta_key][meta_value]
1|1|newprefix_foo|whatever
2|2|newprefix_bar|abc

我怎样才能实现这个(在一个单一的)MySQL 查询?

编辑: 根据@Solarflare 的输入,我们假设如下。

  1. 更新查询应该区分大小写(不要替换出现的大写字母)
  2. 替换元键中的所有匹配项,这意味着 frank_oldprefix_foo 变为 frank_newprefix_foo

按照 solarflare 的建议使用 Mysql 替换。它区分大小写(我只是仔细检查了我的测试多站点)。所以 sql 将是:

用户元:

UPDATE newprefix_usermeta SET meta_key=REPLACE(meta_key,'oldprefix','newprefix') WHERE meta_key like 'oldprefix%';

选项:

UPDATE newprefix_options SET option_name=REPLACE(option_name,'oldprefix','newprefix') WHERE option_name like 'oldprefix%' ;