首页 > 解决方案 > MySQL - 在重复键更新时插入... - 如何区分插入或更新?

问题描述

我正在使用 Node.js。我使用mysqlbluebird包装。

const pool = mysql.createPool({ ... });

const query = (stmt, params) => {
    return Promise.promisify(pool.query, { context: pool })(stmt, params);
};

const params = { ... };

const stmt = 'insert into table set ? on duplicate key update ?';

return query(stmt, [params, params])
    .then(results => {
        // I want to know actually what is done, insert or update
    });

标签: mysqlnode.jsnode-mysql

解决方案


返回对象应该有一个键affectedRows。从引用中,affectedRows如果插入则为 1,如果更新则为 0 或 2。

return query(stmt, [params, params])
    .then(results => {
        // I want to know actually what is done, insert or update
        if (results.affectedRows === 1) {
            // inserted
        } else {
            // updated
        }
    });

对于 INSERT ... ON DUPLICATE KEY UPDATE 语句,如果将行作为新行插入,则每行的受影响行值为 1,如果更新现有行,则为 2,如果将现有行设置为其当前值,则为 0 . 如果您指定 CLIENT_FOUND_ROWS 标志,如果现有行设置为其当前值,则受影响的行值为 1(而不是 0)。

参考:https ://dev.mysql.com/doc/refman/8.0/en/mysql-affected-rows.html


推荐阅读