# MySQL容易遗忘的sql
# 不存在则插入,存在则更新
INSERT ... ON DUPLICATE KEY UPDATE
该语句是基于唯一索引或主键使用,如果不满足唯一索引和主键只能插入数据。
# 举例
INSERT INTO book (`a`, `b`, `c`) VALUES (11, 22, 33)
ON DUPLICATE KEY UPDATE a = 77, c = 88;
1
2
3
2
3
// In NodeJs Sequelize
model.book.upsert({a: 11, b: 22, c: 33},{ fields: [ 'b', 'c' ] });
1
2
2
# 不存在则插入,存在则查询
// In NodeJs Sequelize
const [ row ] = await ctx.models.book.findOrCreate({
attributes: [ 'id', 'year' ],
where: { year: 2019 },
defaults: { categoryId: 1, year: 2 },
raw: true,
});
1
2
3
4
5
6
7
2
3
4
5
6
7
注意:以上方法Sequelize是执行两个SQL,并且自动包了一个事务。