The transaction object is used to identify a running transaction. It is created by calling Sequelize.transaction(). To run a query under a transaction, you should pass the transaction in the options object.
| Static Public Members | ||
|---|---|---|
| public static get | ISOLATION_LEVELS: {"READ_UNCOMMITTED": string, "READ_COMMITTED": string, "REPEATABLE_READ": string, "SERIALIZABLE": string} Isolation levels can be set per-transaction by passing | |
| public static get | Possible options for row locking. | |
| public static get | Types can be set per-transaction by passing | |
| Public Constructor | ||
|---|---|---|
| public | constructor(sequelize: Sequelize, options: Object) Creates a new transaction instance | |
| Public Members | ||
|---|---|---|
| public get | LOCK: * Please see Transaction.LOCK | |
| Public Methods | ||
|---|---|---|
| public | afterCommit(fn: Function) A hook that is run after a transaction is committed | |
| public | Commit the transaction | |
| public | Rollback (abort) the transaction | |
Isolation levels can be set per-transaction by passing options.isolationLevel to sequelize.transaction. Sequelize uses the default isolation level of the database, you can override this by passing options.isolationLevel in Sequelize constructor options.
Pass in the desired level as the first argument:
| Name | Type | Attribute | Description |
|---|---|---|---|
| READ_UNCOMMITTED | * | ||
| READ_COMMITTED | * | ||
| REPEATABLE_READ | * | ||
| SERIALIZABLE | * |
return sequelize.transaction({isolationLevel: Sequelize.Transaction.ISOLATION_LEVELS.SERIALIZABLE}, transaction => {
// your transactions
}).then(result => {
// transaction has been committed. Do something after the commit if required.
}).catch(err => {
// do something with the err.
}); Possible options for row locking. Used in conjunction with find calls:
| Name | Type | Attribute | Description |
|---|---|---|---|
| UPDATE | * | ||
| SHARE | * | ||
| KEY_SHARE | * |
Postgres 9.3+ only | |
| NO_KEY_UPDATE | * |
Postgres 9.3+ only |
| Object |
| Name | Type | Attribute | Description |
|---|---|---|---|
| UPDATE | * | ||
| SHARE | * | ||
| KEY_SHARE | * |
Postgres 9.3+ only | |
| NO_KEY_UPDATE | * |
Postgres 9.3+ only |
// 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 Types can be set per-transaction by passing options.type to sequelize.transaction. Default to DEFERRED but you can override the default type by passing options.transactionType in new Sequelize. Sqlite only.
Pass in the desired level as the first argument:
| Name | Type | Attribute | Description |
|---|---|---|---|
| DEFERRED | * | ||
| IMMEDIATE | * | ||
| EXCLUSIVE | * |
return sequelize.transaction({type: Sequelize.Transaction.TYPES.EXCLUSIVE}, transaction => {
// your transactions
}).then(result => {
// transaction has been committed. Do something after the commit if required.
}).catch(err => {
// do something with the err.
}); Creates a new transaction instance
| Name | Type | Attribute | Description |
|---|---|---|---|
| sequelize | Sequelize |
A configured sequelize Instance | |
| options | Object |
An object with options | |
| options.type | string |
|
Sets the type of the transaction. Sqlite only |
| options.isolationLevel | string |
|
Sets the isolation level of the transaction. |
| options.deferrable | string |
|
Sets the constraints to be deferred or immediately checked. PostgreSQL only |
Please see Transaction.LOCK
Copyright © 2014–present Sequelize contributors
Licensed under the MIT License.
https://sequelize.org/master/class/lib/transaction.js~Transaction.html