mysql - MySQL - 在重复键更新时插入... - 如何区分插入或更新?
问题描述
我正在使用 Node.js。我使用mysql
和bluebird
包装。
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
});
解决方案
返回对象应该有一个键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
推荐阅读
- angular - MatSort 不工作。引发错误:MatSortHeader 必须放置在具有 MatSort 指令的父元素中
- asp.net - 提交表单后在 mvc asp.net 中打开一个弹出窗口
- visual-studio - VS突然拒绝显示用户控件
- python - 适用于 Windows 的 Python 安装程序:禁用路径长度限制选项不可用
- sql-server-2014 - SQL:查询以获取两行中的单行数据
- android - 加载 OpenAL Soft 时缺少符号“aligned_alloc”
- jmeter - 如何将超过 10 个命令行参数传递给 jmeter 命令行运行?
- mongodb - 如何在 MongoDB 中通过深度查询“find()”数据?
- reactjs - 为什么在 setState 之后调用 getDerivedStateFromProps?
- bash - bash 文件扩展名