事务是在保持数据库数据一致性的前提下,将多个操作作为一个整体执行的方法。Sequelize.js 是 Node.js 中比较流行的 ORM 框架,提供了方便的事务实现。
开始一个事务
在 Sequelize 中,可以使用 sequelize.transaction() 方法来创建一个事务。
const transaction = await sequelize.transaction();
该方法返回一个 Promise,需要使用 await 关键字或 .then() 方法来接收返回的事务对象。
操作
创建好一个事务后,需要将需要执行的多个操作放在一起,形成一个整体,只有当所有操作都成功执行时,整个事务才会被提交。
以下是一个简单的事务示例,将两个操作作为一个整体执行。
try { await sequelize.transaction(async (transaction) => { await ModelA.create({ ... }, { transaction }); await ModelB.create({ ... }, { transaction }); }); } catch (error) { console.error(error); }
在这个示例中,ModelA 和 ModelB 是 Sequelize 的数据模型,create() 方法是创建数据的操作。注意,在调用 create() 方法时,需要将 transaction 对象传递给选项参数中。
回滚事务
有时,某个操作失败了,可能会影响到后续操作,这时我们需要回滚整个事务。
在 Sequelize 中,可以使用 rollback() 方法来回滚事务。
以下是回滚事务的示例:
-- -------------------- ---- ------- --- - ----- --------------------------- ------------- -- - ----- --------------- --- -- - ----------- --- ----- --------------- --- -- - ----------- --- ----- --- ----------- ----- ------------ --- - ----- ------- - --------------------- -
当 create() 方法执行失败时,会抛出一个异常,这时事务会被自动回滚。
总结
使用事务可以保证数据库数据的一致性,是个非常实用的技术。在 Sequelize 中,使用 sequelize.transaction() 方法来创建一个事务对象,将需要执行的操作放在事务中,保持操作的原子性。回滚操作使用 rollback() 方法来实现。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64857d3148841e989444db77