トランザクション
トランザクションオブジェクトは、実行中のトランザクションを識別するために使用されます。これはSequelize.transaction()
を呼び出すことによって作成されます。トランザクション下でクエリを実行するには、オプションオブジェクトでトランザクションを渡す必要があります。
静的メンバの概要
静的パブリックメンバ | ||
public static get |
ISOLATION_LEVELS: {"READ_UNCOMMITTED": string, "READ_COMMITTED": string, "REPEATABLE_READ": string, "SERIALIZABLE": string} 分離レベルは、 |
|
public static get |
行ロックに使用できるオプション。 |
|
public static get |
|
コンストラクタの概要
パブリックコンストラクタ | ||
public |
constructor(sequelize: Sequelize, options: object) 新しいトランザクションインスタンスを作成します |
メンバの概要
パブリックメンバ | ||
public get |
LOCK: * Transaction.LOCK を参照してください |
メソッドの概要
パブリックメソッド | ||
public |
afterCommit(fn: Function) トランザクションがコミットされた後に実行されるフック |
|
public |
トランザクションをコミットします |
|
public |
async forceCleanup() このトランザクションが使用する接続を強制的に閉じます。 |
|
public |
async prepareEnvironment(useCLS: boolean): Promise 使用する接続を取得し、接続に正しいオプションを設定するために呼び出されます。 |
|
public |
トランザクションをロールバック(中止)します |
静的パブリックメンバ
public static get ISOLATION_LEVELS: {"READ_UNCOMMITTED": string, "READ_COMMITTED": string, "REPEATABLE_READ": string, "SERIALIZABLE": string} source
分離レベルは、sequelize.transaction
にoptions.isolationLevel
を渡すことで、トランザクションごとに設定できます。Sequelizeはデータベースのデフォルトの分離レベルを使用します。Sequelizeコンストラクタオプションでoptions.isolationLevel
を渡すことで、これを上書きできます。
最初の引数として必要なレベルを渡します
プロパティ
名前 | タイプ | 属性 | 説明 |
READ_UNCOMMITTED | * | ||
READ_COMMITTED | * | ||
REPEATABLE_READ | * | ||
SERIALIZABLE | * |
例
try {
const result = await sequelize.transaction({isolationLevel: Sequelize.Transaction.ISOLATION_LEVELS.SERIALIZABLE}, transaction => {
// your transactions
});
// transaction has been committed. Do something after the commit if required.
} catch(err) {
// do something with the err.
}
public static get LOCK: object: {"UPDATE": string, "SHARE": string, "KEY_SHARE": string, "NO_KEY_UPDATE": string} source
行ロックに使用できるオプション。find
呼び出しと組み合わせて使用します
プロパティ
名前 | タイプ | 属性 | 説明 |
UPDATE | * | ||
SHARE | * | ||
KEY_SHARE | * | Postgres 9.3+ のみ |
|
NO_KEY_UPDATE | * | Postgres 9.3+ のみ |
戻り値
object |
戻り値のプロパティ
名前 | タイプ | 属性 | 説明 |
UPDATE | * | ||
SHARE | * | ||
KEY_SHARE | * | Postgres 9.3+ のみ |
|
NO_KEY_UPDATE | * | Postgres 9.3+ のみ |
例
// t1 is a transaction
Model.findAll({
where: ...,
transaction: t1,
lock: t1.LOCK...
});
UserModel.findAll({
where: ...,
include: [TaskModel, ...],
transaction: t1,
lock: {
level: t1.LOCK...,
of: UserModel
}
});
# UserModel will be locked but TaskModel won't!
// t1 is a transaction
Model.findAll({
where: ...,
transaction: t1,
lock: true,
skipLocked: true
});
# The query will now return any rows that aren't locked by another transaction
public static get TYPES: {"DEFERRED": string, "IMMEDIATE": string, "EXCLUSIVE": string} source
sequelize.transaction
に options.type
を渡すことで、トランザクションごとにタイプを設定できます。デフォルトはDEFERRED
ですが、new Sequelize
でoptions.transactionType
を渡すことで、デフォルトのタイプを上書きできます。Sqliteのみ。
最初の引数として必要なレベルを渡します
プロパティ
名前 | タイプ | 属性 | 説明 |
DEFERRED | * | ||
IMMEDIATE | * | ||
EXCLUSIVE | * |
例
try {
await sequelize.transaction({ type: Sequelize.Transaction.TYPES.EXCLUSIVE }, transaction => {
// your transactions
});
// transaction has been committed. Do something after the commit if required.
} catch(err) {
// do something with the err.
}
パブリックコンストラクタ
public constructor(sequelize: Sequelize, options: object) source
新しいトランザクションインスタンスを作成します
パラメータ
名前 | タイプ | 属性 | 説明 |
sequelize | Sequelize | 設定済みのsequelizeインスタンス |
|
options | object | オプションを持つオブジェクト |
|
options.type | string |
|
トランザクションのタイプを設定します。Sqliteのみ |
options.isolationLevel | string |
|
トランザクションの分離レベルを設定します。 |
options.deferrable | string |
|
制約を遅延させるか、すぐにチェックするかを設定します。PostgreSQLのみ |
options.readOnly | boolean |
|
このトランザクションがデータの読み取りのみに使用されるかどうか。sequelizeが読み取りレプリケーションサーバーを使用できるかどうかを判断するために使用されます。 |
パブリックメンバ
パブリックメソッド
public afterCommit(fn: Function) source
トランザクションがコミットされた後に実行されるフック
パラメータ
名前 | タイプ | 属性 | 説明 |
fn | Function | コミットされたトランザクションとともに呼び出されるコールバック関数 |
public async forceCleanup() source
このトランザクションが使用する接続を強制的に閉じます。例えば、COMMITまたはROLLBACKがエラーになり、トランザクションが壊れた状態のままになり、接続をプールに解放すると危険な場合に、最後の手段として使用されます。