【问题标题】:Insert to table or update if exists using MYSQL database使用 MYSQL 数据库插入表或更新(如果存在)
【发布时间】:2014-04-10 14:40:52
【问题描述】:

我有 mysql 数据库。我需要更新我桌子上的国家/地区列表。我的桌子上有一些国家。如果不存在,我需要检查那个国家并插入到表格中。我使用以下 sql 脚本。但这不起作用。执行此代码时,它将复制记录。

MySQL 查询:

INSERT INTO `moneyexpressstore`.`countries` (`Name`, `Code`, `CurrencyId`) VALUES
    ('Australia', 'au', NULL) ON DUPLICATE KEY UPDATE Name=VALUES(Name)

谢谢,

【问题讨论】:

  • 你的结构表有主键吗?
  • 你在那个表中是否有唯一索引(我猜应该是Code)?
  • 因为该查询的键是指主键.. 不可能有重复记录
  • @RonaldAlexanderKailola:不一定是主键。任何唯一索引都可以。
  • @sergio 是的,对不起我的错误

标签: mysql


【解决方案1】:

首先确保您的数据库在countries 列上没有重复记录,然后执行此操作

CREATE UNIQUE INDEX countriesindex ON countries (Name(50))

50 是索引将搜索“唯一”值的字符数。例如,如果该数字是 3,那么这两个不同的字符串将被认为是相同的,并且会发生 1062 Duplicate Entry 错误 abcHELLO=abcWORLD 并且在您的情况下,它将强制使用 UPDATE 而不是 INSERT

如果您收到 1062 错误,这意味着您的数据库中有重复项,因此请找到它们删除它们并重试。

在此之后,您的查询将执行得很好,并且将更新而不是在“名称”上重复

【讨论】:

    【解决方案2】:

    看一下mysqlhttps://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html的文档

    INSERT INTO table (a,b,c) VALUES (1,2,3)
      ON DUPLICATE KEY UPDATE c=c+1;
    

    【讨论】:

      【解决方案3】:

      试试这个:

      insert into `moneyexpressstore`.`countries` (id, `Name`, `Code`, `CurrencyId`) values(NULL,'Australia', 'au', NULL) on duplicate key update name=values(name)
      

      请参考此链接:

      http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

      【讨论】:

        猜你喜欢
        • 2011-05-11
        • 2020-04-04
        • 1970-01-01
        相关资源
        最近更新 更多