【问题标题】:On Duplicate Key Update (Non unique field)重复密钥更新(非唯一字段)
【发布时间】:2012-01-06 21:55:25
【问题描述】:

我正在编写一个附加到 MySQL 数据库的 PHP CSV 导入脚本。我想让用户选择在发现重复项时插入新行或更新它们。

我不能使用 ON DUPLICATE KEY UPDATE 因为该列不能是唯一的,否则当他们想要重复时它不会满足。

我该怎么办?

【问题讨论】:

    标签: php mysql key duplicates


    【解决方案1】:

    使用 2 个查询 - 一个选择查询来确定该行是否存在,然后根据该结果执行插入或更新查询。

    【讨论】:

    • 我正在考虑这样做,但这是最有效的方法吗?如果它是一个特别大的文件,那么检查每一行以查看它是否存在似乎非常低效。
    【解决方案2】:

    我会编写脚本以在命令行上使用。在您的循环中,检查是否已存在具有相同键的条目。如果是,提示用户决定使用 fgets(STDIN) 做什么。

    【讨论】:

      【解决方案3】:

      为什么不直接在表中添加一个UNIQUE 键,可能跨越多个字段? 这是一个给出以下简单电话簿表的示例:

      CREATE TABLE phonebook (
          firstname VARCHAR(255),
          lastname VARCHAR(255),
          home VARCHAR(50),
          mobile VARCHAR(50)
      )
      

      您可以轻松添加一个键,使名字和姓氏一起唯一。

      ALTER TABLE phonebook ADD UNIQUE (firstname, lastname)
      

      这样您就可以在姓名已在列表中时使用ON DUPLICATE KEY UPDATE 语句轻松更新电话号码:

      INSERT INTO phonebook (firstname, lastname, home, mobile) 
      VALUES ("john", "doe", "12345", "45678")
      ON DUPLICATE KEY UPDATE home = "12345", mobile = "45678"
      

      其他一切都变得不必要地复杂。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-31
        • 2018-06-24
        • 1970-01-01
        • 2013-03-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多