通常我使用手动查找替换文本在MySQL数据库使用phpMyAdmin。我现在厌倦了,我怎么能运行一个查询,在phpMyAdmin的整个表中找到和替换一个新的文本?
例如:查找关键字domain。例如,替换为www.domain.example。
通常我使用手动查找替换文本在MySQL数据库使用phpMyAdmin。我现在厌倦了,我怎么能运行一个查询,在phpMyAdmin的整个表中找到和替换一个新的文本?
例如:查找关键字domain。例如,替换为www.domain.example。
当前回答
另一种选择是为数据库中的每一列生成语句:
SELECT CONCAT(
'update ', table_name ,
' set ', column_name, ' = replace(', column_name,', ''www.oldDomain.example'', ''www.newDomain.example'');'
) AS statement
FROM information_schema.columns
WHERE table_schema = 'mySchema' AND table_name LIKE 'yourPrefix_%';
这将生成一个更新语句列表,然后您可以执行这些更新语句。
其他回答
UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);
比如,如果我想把所有出现的约翰替换为马克,我会用下面的方法,
UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
我相信“swapnesh”答案是最好的!不幸的是,我不能执行它在phpMyAdmin(4.5.0.2)谁虽然不合逻辑(并尝试了几件事),它一直说,一个新的语句被发现,没有分隔符被发现…
因此,我提出了以下解决方案,如果您遇到同样的问题,并且除了PMA之外没有其他访问数据库的方法,可能会很有用……
UPDATE `wp_posts` AS `toUpdate`,
(SELECT `ID`,REPLACE(`guid`,'http://old.tld','http://new.tld') AS `guid`
FROM `wp_posts` WHERE `guid` LIKE 'http://old.tld%') AS `updated`
SET `toUpdate`.`guid`=`updated`.`guid`
WHERE `toUpdate`.`ID`=`updated`.`ID`;
要测试预期的结果,您可能需要使用:
SELECT `toUpdate`.`guid` AS `old guid`,`updated`.`guid` AS `new guid`
FROM `wp_posts` AS `toUpdate`,
(SELECT `ID`,REPLACE(`guid`,'http://old.tld','http://new.tld') AS `guid`
FROM `wp_posts` WHERE `guid` LIKE 'http://old.tld%') AS `updated`
WHERE `toUpdate`.`ID`=`updated`.`ID`;
对于单个表更新
UPDATE `table_name`
SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')
从多个表-
如果您希望从所有表中进行编辑,最好的方法是获取转储,然后查找/替换并上传回来。
phpMyAdmin包含一个简洁的查找和替换工具。
选择表,然后点击Search > Find and replace
这个查询花费了大约一分钟的时间,成功地替换了几千个oldurl实例。用新url进行扩展。列post_content中的ext
这个方法最棒的地方是:你可以在提交之前检查每个匹配。
注意:我使用phpMyAdmin 4.9.0.1
在有大小写字母的句子中, 我们可以使用二进制REPACE
UPDATE `table_1` SET `field_1` = BINARY REPLACE(`field_1`, 'find_string', 'replace_string')