到底什么情况下需要使用 MySQL 事务?

2021-09-01 18:42:24 +08:00
 wangbenjun5
众所周知,MySQL 事务具有原子性,当你需要对对张表同时进行操作的时候,为了保证要么都成功,要么都失败,必须使用事务机制。

但是仔细想想,举个例子 insert 操作,除非是 sql 语句写的有问题,正常情况下很难出错,除非是网络连接失败、数据库挂了、连接池满了等意外情况。这些都是极低概率事件。

然而如果同时操作的表不在一个库就操蛋了……所以去 tm 的事务,听天由命吧,大不了表里面多几条废数据,用什么事务!我不用了
6755 次点击
所在节点    MySQL
50 条回复
EscYezi
2021-09-02 01:42:28 +08:00
“丢了就丢了”......希望出生产事故的时候楼主还能这么想
yeqizhang
2021-09-02 02:07:17 +08:00
标题就起的很唬人,正文又描述的其它
dayeye2006199
2021-09-02 02:19:06 +08:00
我要是公司领导,我只想把 LZ 拖出去打屁屁
felixcode
2021-09-02 02:57:09 +08:00
所以其它的可靠性设计在你这样的程序面前全都是个摆设,因为这样的程序在哪都是水桶的最短板。
yogogo
2021-09-02 07:44:32 +08:00
多表操作的时候
paranoiddemon
2021-09-02 08:03:19 +08:00
加事务代码量很大?
murmur
2021-09-02 08:43:11 +08:00
这就是互联网思维,亲爱的用户我是你 X 爱用用不用拉倒,数据丢了就陪你点代金券就当无事发生
msaionyc
2021-09-02 09:20:10 +08:00
希望以后不会遇到你这种同事
tabris17
2021-09-02 09:34:01 +08:00
再过几年,你回过头来看当年发的这个帖子,你内心会有多尴尬呀

当然,那时候你可能也已经转行了
pkoukk
2021-09-02 09:36:50 +08:00
啧啧啧,我上大学的时候都问不出这种问题来。
cbasil
2021-09-02 09:49:38 +08:00
例如商城里面优惠券使用,如果优惠券已经抵扣了,但是下单是因为用户账户问题下单失败,不用事务怎么处理优惠券还原的问题
sujin190
2021-09-02 10:33:16 +08:00
恰恰多个操作不在同一个库才更需要事务,哥们,你搞反了
banmuyutian
2021-09-02 10:43:25 +08:00
逆天
realpg
2021-09-02 11:11:01 +08:00
楼主,你要是入职哪个第三方支付一定告诉我啊,我多注册接
heyjei
2021-09-02 11:33:04 +08:00
你们其实没看到楼主的问题在哪。

楼主的问题是一个 insert 语句还要用 begin transaction, commit 包起来,觉得很麻烦。楼主不知道的是单独的 sql 语句,数据库执行的时候是默认开始并在语句结束后自动提交事务的。
heyjei
2021-09-02 11:40:42 +08:00
而我们所说的事务,一般都是指有很多个 sql 语句一起执行的时候,需要用事务包起来,要么全部执行,要么全部不执行。

在这里触发事务回滚的不一定是 SQL 写错了,或者磁盘故障,或者网络故障,更多的时候,我们触发回滚都业务上的逻辑,比如转账的时候,先 sql 减去了一个人的钱,然后通过另外一个 sql 语句发现对方账号锁了,转不进钱,于是这里只需要回滚事务就可以了,不需要重新执行 sql 一步步的恢复现场。


这只是一个简单的例子,数据库的事务远远不止这些。
heyjei
2021-09-02 11:43:09 +08:00
善用事务,可以极大的简化和优化你的业务逻辑代码
kenvix
2021-09-02 11:46:23 +08:00
先不说别的,姑且问一句写过存储过程吗
darkengine
2021-09-02 12:44:27 +08:00
是否需要提桶跑路 = 调用次数 * 故障发生概率 * 故障后果

由此可知,不能因为“故障发生概率低”就不管
Felldeadbird
2021-09-02 13:48:00 +08:00
insert 语句也会出错啊。假定你某个 SQL 不稳定,导致一直 sleep 。这时候你 insert 就 wait 状态。你没事务的话,等 wait 结束后,他插入了数据。

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

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

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

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

© 2021 V2EX