【问题标题】:How to insert if not existing and update if existing (upsert)? [duplicate]如果不存在如何插入,如果存在则更新(更新插入)? [复制]
【发布时间】:2019-01-16 13:21:31
【问题描述】:

我目前对以下内容感到困惑:

var post = {ip: host, status: info};
var sql = con.query('INSERT OR IGNORE INTO ipaddress SET ?', post, 
function(err, result){});

我已经将IP地址设置为主键了。

【问题讨论】:

  • 这是哪个数据库?通过快速搜索,它似乎是 Oracle、Postgres 或 sqlite。
  • 我正在使用mysql
  • 你指的操作叫做UPSERT。知道用谷歌搜索什么是关键:P - 这是一篇很好的文章,介绍了多种方式来做你想做的事 - chartio.com/resources/tutorials/…

标签: mysql node.js


【解决方案1】:

续集

既然你用的是node.js,那用Sequelize怎么样?

Sequelize 是一个基于 Promise 的 ORM,适用于 Node.js v4 及更高版本。它支持方言 PostgreSQL、MySQL、SQLite 和 MSSQL,并具有可靠的事务支持、关系、读取复制等。

如果你不太了解 SQL 也没关系,因为你可以使用它的内置函数。例如,如果你想执行upsert

ipaddress.upsert({
    ip: host,
    status: info,
});

纯 MySQL

如果您仍想使用 MySQL,请使用 ON DUPLICATE KEY UPDATE 执行 upsert。

var sql = `INSERT INTO post (ip, status) VALUES (${host}, ${info}) ON DUPLICATE KEY UPDATE ip=${host}, status=${info}`;

但是您需要注意一些潜在的问题,例如 SQL 注入。

【讨论】:

  • 那么用什么sequelize更安全呢?还是纯mysql?
猜你喜欢
  • 1970-01-01
  • 2019-10-17
  • 2012-12-13
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多