一、mysql事务是什么?
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
- 就拿银行转账这个事情来说
select user.balance from user -- 首先判断用户余额是否足够
update user set balance=400 where actno=1; -- 这时用户账户1的余额就扣除到400了
update user set balance=200 where actno=2; -- 用户账号2多了200
// 如果在第一个过程中的数据操作报错,大家想想,是不是只扣了钱,而另一个账户没收到钱
// 完犊子了呗?
// no 咱们还可以 rollback 回滚
- 事务四大特性
- 原子性(A):事务是最小单位,不可再分
- 一致性©:事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败
- 隔离性(I):事务A和事务B之间具有隔离性
- 持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)
二、为什么要用mysql事务?
一首rap给大家回顾一下,为什么要用事务,什么时候需要rolllback
reader1:就当是一场梦 醒了还是很感动
reader2:淡黄的长裙,蓬松的头发
或者这样:
这什么啊,不行,这个时候,在大脑里说:“回滚!回滚!”
Oh mygod.一切都消失了,时光倒流 回到节目开始,你一脸平静的模样说,我要退赛!
这就是事务的回滚功能 🐶
三、怎么写事务?
以下是基于egg-sequelize的事务写法,以供参考
let transaction;
try {
// 建立事务对象
transaction = await this.ctx.model.transaction();
// 事务增操作
await this.ctx.model.VirtualDeptMember.create({
JSON格式数据
}, {
transaction,
});
// 事务删操作
await this.ctx.model.VirtualDeptMember.destroy({
where: {
JSON格式数据
},
transaction,
});
// 事务改操作
await this.ctx.model.Device.update({
修改的JSON数据
}, {
where: {
查询的JSON数据
},
transaction,
});
// 提交事务
await transaction.commit();
} catch (err) {
// 事务回滚
await transaction.rollback();
}
欢迎关注群鱼湾公众号,做有态度的技术人✨