【问题标题】:Insert many into sql table on duplicate update在重复更新时将许多插入到 sql 表中
【发布时间】:2020-09-13 18:41:58
【问题描述】:

我是 mysql 新手,我正在尝试在表中插入很多,如果有重复的名称,请忽略它并继续。我目前在 nodejs 工作。这是我的代码示例

 let sql = `INSERT INTO integrations
            (name)
           VALUES ? 
           ON DUPLICATE KEY UPDATE 
           name=VALUES(name)`;
this.connection.query(sql, [this.createValues()], function (err :any, result: any) {
  if (err) throw err;
  console.log('modified ' + result.affectedRows + "records(s)");
});

createValues() 返回一个类似的数组

["bob", "mike", "anna", "theo", "karen"]

问题是值总是被再次插入,我最终在表中得到多个同名值。 最好的方法是什么。

【问题讨论】:

  • name字段是否有唯一索引或pk?
  • 是的,我用 TypeOrm 创建了这个表,这里是这个导出类的实体 Integrations { @PrimaryGeneratedColumn() id: number; @Column({ unique: true }) 名称:字符串; }
  • 那么您的列中不能有重复项。

标签: mysql sql node.js


【解决方案1】:

为了让您的代码正常工作,name 必须声明为 unique(或作为主键)。在数据库中,您可以通过创建唯一索引或约束来做到这一点:

create unique index unq_integrations_name on integrations(name);

这只需要做一次,通常是在创建表时。

【讨论】:

    猜你喜欢
    • 2021-03-06
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多