其实事务这块都没问题,model里面封装的问题,现在已经解决了。谢谢各位回复
官方手动提交事务的结果,效果并没有改变,很多写法都尝试了一边,最后都是第一条记录插入成功,没有回滚和日志不一样
日志看到有回滚动作,但是数据库还有插入第一条数据
修改异步的写法,结果一样,如数据库成功插入数据companys,
其实事务这块都没问题,model里面封装的问题,现在已经解决了。谢谢各位回复
官方手动提交事务的结果,效果并没有改变,很多写法都尝试了一边,最后都是第一条记录插入成功,没有回滚和日志不一样
日志看到有回滚动作,但是数据库还有插入第一条数据
修改异步的写法,结果一样,如数据库成功插入数据companys,
5 回答4.8k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
5 回答1.9k 阅读
2 回答1.3k 阅读✓ 已解决
3 回答2k 阅读
1 回答3.2k 阅读
看你的图,其实你的
CompanyModel.create
和that.baseCreate
都没有加入到事务里面,看你的start transaction
和rollback
前都有一个id
这个是
Sequelize
用来标识事务的,这个id
相同说明在同一个事务,如果你的两个sql
也是这个事务的,Executing
后跟的就不是(default)
了,而是这个id
你的用法不对。参考文档示例:
第二个图的代码改写
上面的写法,如果还是不行的话,说明 CompanyModel.create() 得写成 你的第一幅图的形式,在你第一幅图的这两行代码前:
这个是参考官方文档的写法,其实这种方法写起来很繁琐,推荐下面的写法,不过得手动提交和回滚事务
直接可以使用this , 也不必再写最外层
then
和catch
了,只要你的同一个事务的id
是一样的,说明没问题了。