事务介绍
事务是数据库管理系统(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();
}