我正在尝试寻找一种方法来替换我的数据库中所有出现的特定模式跨多个表和列,为此我需要创建一些方法来执行此操作,它不需要通过脚本完成,只是一些将执行此操作的SQL代码。
例如,我想替换所有出现的' v2'与' www'但不知道该怎么做。
我不是在寻找教程,只是关于如何做以及如何编写所需SQL脚本的一些指导。
我该怎么做?
答案 0 :(得分:0)
只是为了指导你的方向。您可以使用替换功能:
UPDATE MyTable
SET StringColumn = REPLACE (StringColumn, 'SearchForThis', 'ReplaceWithThis')
WHERE SomeOtherColumn LIKE '%PATTERN%';
在之前的帖子中有更多信息: How can I use mySQL replace() to replace strings in multiple records?
答案 1 :(得分:0)
您可以使用select CONCAT(...) from information_schema.columns
为每个表 - 列组合生成更新查询,其中...
是更新查询中使用的字符串的组合,以及{{1的列名称数据库。
例如:
information_schema.columns
select CONCAT("UPDATE ", TABLE_NAME, " SET ", COLUMN_NAME, "=REPLACE(",COLUMN_NAME,"'[string-to-find]'","'[string-that-will-replace-it]'",");") FROM information_schema.columns where table_schema = 'your_db';
和COLUMN_NAME
是TABLE_NAME
表中的列,由MySQL
以上查询应该生成结果集:
information_schema.columns
您可以将UPDATE table1 SET field1 = replace(field1,'[string-to-find]','[string-that-will-replace-it]');
UPDATE table1 SET field2 = replace(field2,'[string-to-find]','[string-that-will-replace-it]');
UPDATE table2 SET field3 = replace(field3,'[string-to-find]','[string-that-will-replace-it]');
...
语句的结果输出到文件,然后该文件将成为要执行的脚本。或者,如果使用phpadmin或任何其他编程语言作为接口,则可以遍历结果集,并执行结果集中每行的值。
我从MikeW的回答here得到了关于选择存在数据值的所有行的想法,以及我现在已经忘记了的其他一些堆栈溢出答案,遗憾的是(对不起原作者)