egg框架搭建,以及egg-mysql包的引入,繁琐的操作跟着官方文档走就好了
const conn = await app.mysql.beginTransaction(); // 初始化事务 try { await conn.insert(table, row1); // 第一步操作 await conn.update(table, row2); // 第二步操作 await conn.commit(); // 提交事务 } catch (err) { // error, rollback await conn.rollback(); // 一定记得捕获异常后回滚事务!! throw err; }
|
这是官方给的回滚操作demo,在service里写的话,把app.mysql.beginTransaction();改为this.app.mysql.beginTransaction();
这里有个bug,虽然从官方复制来代码,但执行时候,不论是否有commit或者rollback,事务操作都会执行,就好像他娘的这一坨代码不存在一样,这是因为MySQL默认的存储引擎是MyISAM,MyISAM存储引擎不支持事务处理,需要把引擎修改为InnoDB
顺便提一嘴,InnoDB引擎支持回滚操作,所以性能上会有一点消耗,存储,读取速度不如MyISAM
更改引擎方式如下:
sql语句:show engines //查看当前数据库支持的引擎
sql语句:show table status from ‘数据库名’ where name='表名'; /