繁体   English   中英

如何在MySQL数据库中替换所有行中所有字段中的所有表?

[英]How can I replace a string in a MySQL database for all tables in all fields in all rows?

我有一个Moodle安装,我迁移到另一台服务器,我需要更改几个旧域的引用。

对于搜索所有表,所有字段和所有行的给定数据库如何在MySQL中替换另一个字符串的字符串

我不需要更改字段名称,只需更改值。


相关: 如何使用mySQL replace()替换多个记录中的字符串?

但标记为答案解决方案意味着我强烈键入表名称,我需要将其激活到整个数据库,而不是手动处理运行该脚本的每个表N次。

这可能看起来有点......丑陋。 但也许只需将数据库转储到sql / txt文件,替换所有字符串并使用修改后的转储重新创建数据库。

您可以运行以下代码来创建运行以进行更新所需的所有udpate语句。 它将更新数据库中每个表中的每个字段。 您需要运行此代码,并复制结果并运行它们。

警告 - 务必在测试环境中进行测试。 你不希望任何令人不快的意外。 根据需要修改。

SELECT concat('UPDATE ', TABLE_NAME, ' SET ', COLUMN_NAME, ' = REPLACE(', COLUMN_NAME, ', ''STRING_TO_REPLACE'', ''REPLACE_STRING'')')
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE TABLE_SCHEMA = 'YOUR_DATABASE_NAME'
      AND DATA_TYPE IN ('char', 'varchar')
;

我将此限制为仅限char和varchar字段。 您可能需要添加其他数据类型。

我会考虑查询INFORMATION_SCHEMA.COLUMNS并动态搜索列和表。 尝试在db中创建所有列和表的游标:

DECLARE col_names CURSOR FOR
SELECT column_name, table_name
FROM INFORMATION_SCHEMA.COLUMNS

然后遍历每个表中的每个列,并运行dynamic / prepared sql来更新字符串所在的位置。

以下是一些很好的帖子,可以帮助您找到正确的方向:

https://stackoverflow.com/a/4951354/1073631

https://stackoverflow.com/a/5728155/1073631

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM