1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Sequelizeで外部キーのみで構成されたテーブルを行ロックして更新する際の注意

Posted at

対象テーブルの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
    }
  });

#正式な方法かどうかは怪しい。。。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?