sequelize事务的概念与应⽤

107 阅读2分钟

事务介绍

事务是数据库管理系统(DBMS)中的⼀个原⼦操作序列,它要么完全执⾏,要么完全不执⾏。事务是确保数据库⼀致性和数据完整性的重要机制。事务的四个基本特性通常被称为 ACID 特性:

1. 原⼦性(Atomicity): 事务是⼀个不可分割的⼯作单元,要么全部执⾏,要么全部回滚。如果事务中的任何⼀部分操作失败,整个事务都会被回滚到初始状态。

2. ⼀致性(Consistency): 事务的执⾏使数据库从⼀个⼀致的状态转变为另⼀个⼀致的状态。事务执⾏的结果必须满⾜数据库的完整性约束。

3. 隔离性(Isolation): 多个事务可以并发执⾏,但它们的执⾏应该彼此隔离,互不影响。事务应该像没有其他事务在同时执⾏⼀样执⾏。

4. 持久性(Durability): ⼀旦事务提交,其结果应该是永久性的,即使系统发⽣故障也不应该丢失。

事务的基本操作

1. 开始事务(BEGIN TRANSACTION): 事务的开始标志。在这⼀点之后,所有的数据库操作都被视为属于该事务。

2. 提交事务(COMMIT): 事务成功完成,所有的操作都被应⽤到数据库,变更变得永久有效。

3. 回滚事务(ROLLBACK): 事务发⽣错误或被中⽌,所有的操作都被取消,数据库回滚到事务开始前的状态。

事务的应⽤场景

1. 转账操作: 当需要从⼀个账户扣除⼀定⾦额并将其添加到另⼀个账户时,这两个操作应该作为⼀个事务来执⾏,以确保数据的⼀致性。

2. 订单处理: 处理订单时,减少库存和更新订单状态应该是⼀个事务,以防⽌库存错误或订单状态不⼀致。

3. 数据库备份: 将数据库从⼀个状态转移到另⼀个状态时,可以使⽤事务确保备份的⼀致性。

4. 数据的复杂修改: 当需要执⾏⼀系列复杂的数据库操作时,将它们包装在⼀个事务中可以确保整体的⼀致性。

示例

// ⾸先, 我们从你的连接开始⼀个事务并将其保存到⼀个变量中

const t = await sequelize.transaction();

try {

// 然后,我们进⾏⼀些调⽤以将此事务作为参数传递:

const user = await User.create({

firstName: 'Bart',

lastName: 'Simpson'

}, { transaction: t });

await user.addSibling({

firstName: 'Lisa',

lastName: 'Simpson'

}, { transaction: t });

// 如果执⾏到此⾏,且没有引发任何错误.

// 我们提交事务.

await t.commit();

} catch (error) {

// 如果执⾏到达此⾏,则抛出错误.

// 我们回滚事务.

await t.rollback();

}