mysql中查找和替换_使用MySQL查询查找和替换整个表中的文本

回答(9)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

对于 single table 更新

UPDATE `table_name`

SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')

来自 multiple tables -

如果要从所有表中进行编辑,最好的方法是采用 dump 然后 find/replace 并将其上传回来 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我发现最简单的方法是将数据库转储到文本文件,运行sed命令进行替换,然后将数据库重新加载回MySQL .

所有命令都是Linux上的bash,来自内存 .

转储数据库到文本文件

mysqldump -u user -p databasename > ./db.sql

运行sed命令查找/替换目标字符串

sed -i 's/oldString/newString/g' ./db.sql

将数据库重新加载到MySQL中

mysql -u user -p databasename < ./db.sql

十分简单 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

把它放在一个php文件中并运行它,它应该做你想要它做的事情 .

// Connect to your MySQL database.

$hostname = "localhost";

$username = "db_username";

$password = "db_password";

$database = "db_name";

mysql_connect($hostname, $username, $password);

// The find and replace strings.

$find = "find_this_text";

$replace = "replace_with_this_text";

$loop = mysql_query("

SELECT

concat('UPDATE ',table_schema,'.',table_name, ' SET ',column_name, '=replace(',column_name,', ''{$find}'', ''{$replace}'');') AS s

FROM

information_schema.columns

WHERE

table_schema = '{$database}'")

or die ('Cant loop through dbfields: ' . mysql_error());

while ($query = mysql_fetch_assoc($loop))

{

mysql_query($query['s']);

}

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

在PHPmyadmin中运行SQL查询以查找和替换所有wordpress博客帖子中的文本,例如查找mysite.com/wordpress并将其替换为mysite.com/news此示例中的表格为tj_posts

UPDATE `tj_posts`

SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

例如,如果我想用Mark替换所有出现的John,我会在下面使用,

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

另一种选择是为数据库中的每个列生成语句:

SELECT CONCAT(

'update ', table_name ,

' set ', column_name, ' = replace(', column_name,', ''www.oldDomain.com'', ''www.newDomain.com'');'

) AS statement

FROM information_schema.columns

WHERE table_schema = 'mySchema' AND table_name LIKE 'yourPrefix_%';

这应该生成一个可以执行的更新语句列表 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我相信“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`;

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

生成更改SQL查询(FAST)

mysql -e“SELECT CONCAT('update',table_name,'set',column_name,'= replace(',column_name,','''www.oldsite.com'','''www.newsite.com''); ')AS语句FROM information_schema.columns WHERE table_name LIKE'wp_%'“ - u root -p your_db_name_here> upgrade_script.sql

删除文件开头的所有垃圾 . 我有一些 .

nano upgrade_script.sql

使用--force选项运行生成的脚本以跳过错误 . (慢 - 如果大DB那就拿一杯咖啡)

mysql -u root -p your_db_name_here --force

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

最好将它导出为sql文件,然后使用visual studio代码等编辑器打开它,找到并修复你的单词 . 我在1分钟内替换1 gig文件sql 16个单词,总共是14600个单词 . 这是最好的方式 . 并在更换后保存并再次导入 . 别忘了用拉链压缩它以便导入 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值