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

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

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

然而如果同时操作的表不在一个库就操蛋了……所以去 tm 的事务,听天由命吧,大不了表里面多几条废数据,用什么事务!我不用了
7060 次点击
所在节点    MySQL
50 条回复
AngryPanda
2021-09-01 18:43:40 +08:00
说的好!回去等通知。
leonme
2021-09-01 18:48:43 +08:00
正常情况下很难出错,这……举个例子,目前各种分布式共识算法,不就是解决非正常情况下的问题的吗? 事物本质上是简化应用层的开发工作
hqs0417
2021-09-01 18:49:46 +08:00
有些不一定是 SQL 语句的问题,可能是缺少必填字段,主键 /唯一键冲突。
单库上使用事务可以降低系统复杂度。

多库情况下就需要考虑最终一致了
ch2
2021-09-01 18:51:55 +08:00
我给你转 100W,转账失败了
你的钱没多,我的钱扣了
凭空消失 100W 你说事务有啥意义?
Maboroshii
2021-09-01 18:52:09 +08:00
保证原子性... select update 一串操作的时候 。 当然 还要配置隔离级别这种东西。。不过我也基本没咋用过事务..
falcon05
2021-09-01 18:53:39 +08:00
啊?
zhaorunze
2021-09-01 18:56:38 +08:00
可以不用事务,你可以只创建一个表,其他所有场景都往这个表堆字段,行与行之间不需要共享,就不需要事务了。
yianing
2021-09-01 18:58:17 +08:00
账户的余额更改与流水创建必须在一个事务里面
Yadomin
2021-09-01 18:59:01 +08:00
“意外情况”,“极低概率” 就意味着不用管了?
11232as
2021-09-01 19:02:18 +08:00
事务不是个技术问题,事务是跟业务强相关得...
SlipStupig
2021-09-01 19:58:52 +08:00
事务是用来保证数据库操作时的一致性和完整性啊,原子操作也是用来保证一致性啊,数据之间是有关联的一些你觉得不重要的数据可能会产生连锁反应。
比如:订单库存量,在条件竞争的情况下,可能导致库存数量为负数,在一些特定促销场景下然后导致订单爆单,这个时候公司就遭受了损失,这部分损失你愿意承担嘛?
Kilerd
2021-09-01 20:07:58 +08:00
您说的对!
sadfQED2
2021-09-01 20:09:42 +08:00
面试的时候需要使用事物
love
2021-09-01 20:24:59 +08:00
too young 了
你以为就写数据库会出错?你的程序不会抛异常?抛了异常要不要回滚?就这么留着写了一半的数据集?
sy20030260
2021-09-01 20:46:22 +08:00
大部分垃圾代码就是「图个省事」带来的,写的人越省事,后续维护的人越蛋疼
Senorsen
2021-09-01 21:22:54 +08:00
1L + 10086 哈哈哈哈哈

你操作一次出现异常(比如网络错误)的概率假设是万分之一,十万次操作出现异常的概率是多少?更多次操作呢?
图省事没有事务了,除非用户量很少不到几十几百个,否则用户资源状态不一致,全乱了,导致不可用,怎么办?事后处理修数据怕是都难。
seeker
2021-09-01 21:55:49 +08:00
处理钱的时候。如果是个博客啥的,没了就没了把。
billlee
2021-09-01 22:03:34 +08:00
开事务还提升性能啊,innodb 不开事务那其实就是每条语句 auto-commit, 每行写入语句都要刷盘
zhangxiaodao
2021-09-01 23:10:59 +08:00
大多数时候,事务是和锁一起使用用来控制并发的。非并发情况,用或不用,都是业务对编码的容忍度要求。

但是,小同志,你这个『大不了多几条废数据』的思想不能有啊,写代码还是要严谨,坏习惯不能养。
shiji
2021-09-01 23:24:56 +08:00
哈哈,这就好比研究导弹干什么,搞一架客机+几组劳动人民从飞机往下一筐一筐扔手榴弹不就完了

不过一个科技公司一旦高层技术人员都是这个思想,并对新来的 /严谨的人嗤之以鼻的话,基本离完蛋不差几年了。

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

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

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

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

© 2021 V2EX