关于使用 mysql 事务的场景是什么

2015-04-07 23:21:25 +08:00
 tanteng

突然想到一个问题,mysql中我们经常用到事务,比如一次向几张表插入内容,如果中间出错了可以回滚,但是实际开发中,像这种一次可能向多个数据表写入数据的情况,有时并没有采用事务来防止出错。

比如一件商品表单,有商品基本信息,商品sku(颜色尺寸价格库存),商家信息,店铺信息,提交的时候是向不同的表插入或更新数据,并且都是等第一张表插入(或更新)完了,然后第二张表,第三张表。。。

如果中间某个过程突然中断了,只向前一张表成功插入了数据,而后面的程序没有执行,不怕出现这种情况吗?

再比如,文章表一般设计两张表,一张文章基本信息表,一张文章详情表,大内容放详情表,插入和读取数据也是分两步,也一般不用事务。

我用到事务的一个地方是在一个广告联盟系统,根据接口数据计算广告费用并记录到广告报表,同时更新记录到用户收益表,年统计表等,用了事务,中间某个过程出错就回滚。

为什么有的地方用事务,有的地方不用事务,使用事务的场景是什么?

3626 次点击
所在节点    MySQL
4 条回复
lianyue
2015-04-07 23:46:41 +08:00
设计金额 方便 或对数据准确性要求特稿 并且是多表才需要事务 需要的地方很少很少
1 商品 插入优先 基本信息 然后 扩展信息 插入基本信息后才插入扩展信息 比如 颜色尺寸 插入失败大不了 没库存 重新编辑下就好了 失败率很低很低的

2 文章也是 大不了文章没内容

3 广告联盟 广告报表 可以直接用计划任务 定时统计下就好了 每次有浏览都更新2个表么
比如每天凌晨后统计昨天的数据 看今天的数据直接 count 查询统计就好了 不需要事务
lianyue
2015-04-07 23:47:36 +08:00
插入多表 不需要事务都是先插入重要信息 然后插入附加信息 比如允许丢失的信息什么的
kchum
2015-04-07 23:52:47 +08:00
OLTP(On_line Transaction Processing 联机事务处理) 和 OLAP(OLAP:On_line Analytical Processing 联机分析处理) 的区别。
关于银行金融,特别是涉及金钱的,当然要用事务。
按照范式来说,确定应该保持数据的一致性,原子性。
但我们在项目中为了性能,或者其他因素(lan)还不是严格对待。
以上是我的见解
incompatible
2015-04-08 00:06:06 +08:00
多数据源出于性能考虑不使用分布式事务还情有可原(互联网行业基本也都是best effort 1pc)。
如果单数据源还选择不用事务那就完全是业余选手打法。

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

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

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

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

© 2021 V2EX