有必要给每个 DML 操作加上事务吗?

2015-08-07 23:40:09 +08:00
 Lullaby

数据库MySQL
后台开发语言是Java/Python
应用场景是提供接口服务基于HTTP RESTful API

2834 次点击
所在节点    Java
7 条回复
powergx
2015-08-08 01:33:56 +08:00
一组操作就用事务
incompatible
2015-08-08 01:48:47 +08:00
API层的一个post/put/delete操作,涉及到的DML当然要放到同一个事务中
Lullaby
2015-08-08 12:33:32 +08:00
@powergx
@incompatible
我是说单独一个post/put/delete,并不是一组啊
incompatible
2015-08-08 13:13:38 +08:00
@Lullaby API层的操作与数据库层面的操作并不是一对一的关系啊
比如你用微信零钱发了一个红包 这个过程中服务器端除了减少你零钱余额,还要记录一条零钱流水 这样就是两条sql 它们肯定是要放在同一个事务中的
Lullaby
2015-08-08 13:31:51 +08:00
@incompatible 这种当然要放在一个事务中啊,但是如果我只有一条插入sql,有必要显示开启、提交事务吗?
incompatible
2015-08-08 16:32:23 +08:00
@Lullaby 没必要
但是在java里大家通常是这么做的:
有通过sql操作数据库的Dao层
有对外暴露业务行为的Service层

Dao层的sql并不关心自己是否在或不在事务中,事务是在Service层通过AOP来配置的。只要是涉及到insert/delete/update的业务方法,通常都要开启事务。因为我们并不确定这个业务方法是否永远只会调用一个Dao,此时不为其配置事务,今后业务发生改变需要调用更多Dao时,很可能就会忘记加上事务。
Lullaby
2015-08-09 04:19:38 +08:00
@incompatible 嗯嗯 说的很好

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/211637

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX