nodejs Sequelize 事务锁
时间: 2023-07-01 20:24:21 浏览: 61
在 Node.js 中使用 Sequelize ORM 操作数据库时,也可以使用事务锁来实现事务性控制。Sequelize 提供了 `sequelize.transaction()` 方法来创建一个事务对象,可以在事务对象中执行多个数据库操作,如果其中任意一个操作失败,则整个事务都会回滚。
以下是一个使用 Sequelize 实现事务锁的示例代码:
```
const Sequelize = require('sequelize');
const sequelize = new Sequelize('mydb', 'root', 'password', {
host: 'localhost',
dialect: 'mysql'
});
(async () => {
const t = await sequelize.transaction();
try {
// 执行数据库操作
await User.update({ balance: Sequelize.literal('balance - 10') }, { where: { id: 1 }, transaction: t });
await User.update({ balance: Sequelize.literal('balance + 10') }, { where: { id: 2 }, transaction: t });
// 提交事务
await t.commit();
console.log('Transaction completed successfully.');
} catch (error) {
// 回滚事务
await t.rollback();
console.error('Transaction failed:', error);
}
})();
```
在上面的代码中,首先创建了一个 Sequelize 实例,并使用 `sequelize.transaction()` 方法创建了一个事务对象。然后在事务对象中执行两个操作,并在操作中指定 `transaction: t` 来指定操作属于哪个事务。如果操作成功,则提交事务,否则回滚事务。
需要注意的是,在使用 Sequelize 时,需要确保所有的操作都是在同一个事务对象中执行,否则事务锁将无法生效。