ser*_*erg 5 mysql sql records replace
我有一个Moodle安装,我迁移到另一台服务器,我需要更改几个旧域的引用.
对于搜索所有表,所有字段和所有行的给定数据库,如何在MySQL中替换另一个字符串的字符串?
我不需要更改字段名称,只需更改值.
相关:如何使用mySQL replace()替换多个记录中的字符串?
但标记为答案解决方案意味着我强烈键入表名称,我需要将其解压缩到整个数据库,而不是手动处理运行脚本的每个表N次.
您可以运行以下代码来创建执行更新所需的所有 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')
;
Run Code Online (Sandbox Code Playgroud)
我仅限于 char 和 varchar 字段。您可能需要添加其他数据类型。
我会考虑查询INFORMATION_SCHEMA.COLUMNS和动态搜索列和表。尝试创建数据库中所有列和表的游标:
DECLARE col_names CURSOR FOR
SELECT column_name, table_name
FROM INFORMATION_SCHEMA.COLUMNS
Run Code Online (Sandbox Code Playgroud)
然后迭代每个表中的每一列并运行动态/准备好的 sql 来更新字符串存在的位置。
这里有一些很好的帖子可以帮助您找到正确的方向: