替换 mysql 中多个表中的多个字符串

Replace multiple strings in multiple tables in mysql

我正在运行 5.0.8 服务器。(目前无法更新) 我想更改在不同 table 中出现超过 15 次的字符串,我需要对 30000 个字符串执行此操作。我手头只有一个 2 列 table,其中 "old" 和 "new" 值。 有什么建议么?

我建议您 运行 一个用新值替换旧值的 UPDATE 语句。

最简单的方法是 运行 为每个要更新的列创建一个单独的语句。

例如:

UPDATE mytable t
  JOIN old_new s
    ON t.string_column = s.old_value
   SET t.string_column = s.new_value

UPDATE some_other_table t
  JOIN old_new s
    ON t.some_other_column = s.old_value
   SET t.some_other_column = s.new_value

编辑

根据 OP 的评论,我怀疑他没有理解这个建议。作为这些语句作用的演示:

我的table(目标待更新)

id  string_column 
--  -------------
 1  fee
 2  fi
 3  foo
 4  fo
 5  fee
 6  foo

old_new(要用新值替换的旧值列表)

old_value new_value
--------- ---------
fee       fees
fi        fit
foo       bar       

单次 执行上面的 UPDATE mytable 语句将导致分配给 string_column.

的新值

我的table(更新后)

id  string_column
--  -------------
 1  fees
 2  fit
 3  bar
 4  fo
 5  fees
 6  bar

请注意,UPDATE 语句将报告 5 行受影响。不会更新行 id=4,因为在 old_new table.

old_value 列中没有匹配 'fo' 的值

如果这些列中的任何一个涉及外键关系,就会增加一些复杂性。您可以暂时禁用外键执行...

SET foreign_key_checks = 0;

然后执行更新,然后重新启用外键执行

SET foreign_key_checks = 1;