替换 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;
我正在运行 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;