対象テーブルのModelのfindOneのオプションにlock:transaction.LOCK.UPDATEを指定してロックを行い、取得したModelインスタンスのsaveを使用して更新するのがロックを使った更新の一般的な方法と思っている。
const model = require('../models/model');
let upModel = model.findOne({
lock: transaction.LOCK.UPDATE,
where: {
attr1: 42
}
});
upModel.save({
attr2: null
});
外部キーのみで構成されたテーブルの外部キーを更新する場合、この方法では更新が出来なかった。
取得したModelインスタンスは使用せず、Modelのupdateを呼び出しoptionのwhereを同じ条件で更新することで対応できた。
const model = require('../models/model');
let upModel = model.findOne({
lock: transaction.LOCK.UPDATE,
where: {
attr1: 42
}
});
model.update({
attr2: null
}, {
where: {
attr1: 42
}
});
#正式な方法かどうかは怪しい。。。