📅  最后修改于: 2023-12-03 14:52:01.991000             🧑  作者: Mango
在 Sequelize 中,事务可以用于确保多个查询执行的原子性,以及由于任何一个查询失败而必须回滚所有查询。
以下是如何使用 Sequelize 执行交易的示例代码:
const Sequelize = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'mysql',
host: 'localhost'
});
// 定义模型
const User = sequelize.define('user', {
firstName: Sequelize.STRING,
lastName: Sequelize.STRING
});
// 执行事务
sequelize.transaction(async (t) => {
// 在事务中创建两个用户
const user1 = await User.create(
{ firstName: 'John', lastName: 'Doe' },
{ transaction: t }
);
const user2 = await User.create(
{ firstName: 'Jane', lastName: 'Doe' },
{ transaction: t }
);
// 如果 user2 的 firstName 中包含 Doe,则回滚事务
if (user2.firstName.includes('Doe')) {
throw new Error('Invalid first name');
}
})
.then(() => {
console.log('Transaction has been committed');
})
.catch((err) => {
console.error('Transaction has been rolled back', err);
});
在上面的代码中,sequelize.transaction
方法用于执行事务。在事务中,我们执行了两个创建用户的查询,可以看到两个查询都使用了 { transaction: t }
参数,这是为了确保这些查询被包括在事务中。
最后,请注意在事务中如果有一个查询失败,则必须使用 throw new Error()
将事务回滚到之前的状态。
这就是如何使用 Sequelize 执行交易的教程。