替换超过120个表中的MySQL值

时间:2013-01-02 11:48:21

标签: mysql regex replace vbulletin

我们将巨大的互联网服务从域.de重定向到域.com - 这是讨论板(vBulletin)。目前我们需要将所有短语如“domainame.de”更改为“domainame.com”:

  • 超过120个表(帖子,帖子)
  • 很多MySQL字段

有人建议怎么做这样的事情?我们需要将字符串“domainame.de”替换为“domainname.com” - 无处不在。

2 个答案:

答案 0 :(得分:2)

你想做的事情听起来很危险,因为它可能会造成一些误报,并无意中改变了一些事情。假设您的旧域名为“acme.de”,新域名为“acme.com”,并且一些随机访问者发布了以下内容(这是一个过于简化的示例):

  

我喜欢与Acme合作。取决于我的心情。

将其转换为:

非常容易
  

我喜欢和Acme.compending一起工作。

因此,我的建议按优先顺序排列:

  1. 根本不更新数据库,只需配置您的Web服务器以将.de流量重定向到.com流量。你不太可能以这种方式犯错误。

  2. 如果您必须更新讨论区,请在显示逻辑中进行,而不是在数据库中进行 - 那么您就没有机会犯下不可挽回的错误。

  3. 用perl或您喜欢的文本处理语言编写脚本,该语言在每个表/字段上进行正则表达式替换。我建议采取以下策略:

    一个。做一个SELECT id,<field name> FROM <table> WHERE <field name> LIKE '%domain.de%'

    湾将输出存储为CSV或其他易于解析的格式。

    ℃。运行正则表达式脚本,将 domain.de 更改为 domain.com

    d。检查输出。

    即使用脚本的输出执行UPDATE <table> SET <field>=? WHERE id=?

    首先以小块(一次几十或几百个帖子)进行,并在将更改提交到数据库之前目视检查结果,以确保您没有犯错。

答案 1 :(得分:0)

我不知道这可能对你有用,但看看这个

以下查询将为您提供表格列表(120个表格)

   SELECT DISTINCT table_name
   FROM
   (
     SELECT *
     FROM information_schema.`COLUMNS` C
   ) t1
   WHERE TABLE_SCHEMA='schema_name'

下一个  您可以对每个表使用UPDATE查询。您可以使用CURSORS

实现此目的

我不太喜欢游标,但我认为在这种情况下会有所帮助