【问题标题】:Replace all occurences of string in column MYSQL database替换列 MYSQL 数据库中所有出现的字符串
【发布时间】:2016-04-01 05:26:01
【问题描述】:

我正在使用一个数据库,其中有一列包含我认为是 GUID 的数据 c92e5daa-ae5b-4d8e-a20d-9c1f660a7081。我有 4 次出现多次,我想用更方便的方式替换,如下所示:

c92e5daa-ae5b-4d8e-a20d-9c1f660a7081 --> String1
c92e5daa-ae5b-4d8e-a20d-9c1f660a7081 --> String2
c92e5daa-ae5b-4d8e-a20d-9c1f660a7081 --> String3
c92e5daa-ae5b-4d8e-a20d-9c1f660a7081 --> String4

现在我知道我有几个选择。我可以使用替换函数运行 SQL 查询,但这不会这样做,因为数据库总是在获取新数据。 我一直在考虑在我的程序中用条件语句替换它们,但我也不确定。

对于解决此问题的最干净和最好的方法有什么想法吗?

【问题讨论】:

    标签: mysql replace guid


    【解决方案1】:

    如果您的数据库中有当前存在的数据,我怀疑最简单的解决方案是使用替换功能运行更新,修改您当前存在的数据,然后:

    在您的应用程序层中执行您的字符串验证和操作(在这种情况下,检查它的值并相应地修改它),以防止将来在数据库中插入这些字符串。这具有简单的优点。

    例如,您可以构造一个字典类型对象并将要替换的字符串存储为键,并将替换值存储为值。然后,在插入时,只需检查字典中是否存在键,如果存在,则替换其值。

    【讨论】:

    • 您的第一个建议可能是最好的,但不幸的是,我无法控制应用层的插入查询。我的应用程序所做的是将 sqlite 数据库导出为 csv 文件以将其导入 Mysql 数据库,以便我可以远程使用数据。我正在考虑制作一个 powershell 脚本,每次插入新数据时运行查询“UPDATE table SET column="String1" WHERE column="c92e5daa-ae5b-4d8e-a20d-9c1f660a7081”。(由user1403333回答)。我只需要每天运行一次脚本。
    • 这肯定行得通,但我认为如果你的表变得非常大,这种方法很快就会变得非常低效(就开销而言)
    • Redbeard011010 ,你的权利。我对我插入的数据进行了很多评估,每天一次插入 4-6 行。我可以使用 WHERE 子句执行 UPDATE 查询并替换特定日期的 GUID 吗?因为那时我可以一次替换所有行,从那时起每天只替换一次新添加的行?
    【解决方案2】:
    UPDATE table SET column="String1" WHERE column="c92e5daa-ae5b-4d8e-a20d-9c1f660a7081"
    

    【讨论】:

    • 如果新字符串是一种合格的新数据类型,请为它们创建一个新列,并使写入表的应用程序开始写入这两个列。一旦到位,让所有读者使用新列,然后处理旧列(修改作者以停止使用它)。
    • 这不是一个完整的答案。向他展示如何将“string1”等存储到另一个表中,然后如何加入这些表。
    猜你喜欢
    • 2015-05-30
    • 2012-06-14
    • 2012-08-01
    • 2022-12-03
    • 2014-08-05
    • 2021-12-27
    • 2019-01-10
    • 2018-07-11
    • 2014-10-31
    相关资源
    最近更新 更多