
1 AngryPanda 2021-09-01 18:43:40 +08:00 说的好!回去等通知。 |
2 leon0318 2021-09-01 18:48:43 +08:00 via iPhone 正常情况下很难出错,这……举个例子,目前各种分布式共识算法,不就是解决非正常情况下的问题的吗? 事物本质上是简化应用层的开发工作 |
3 hqs0417 2021-09-01 18:49:46 +08:00 有些不一定是 SQL 语句的问题,可能是缺少必填字段,主键 /唯一键冲突。 单库上使用事务可以降低系统复杂度。 多库情况下就需要考虑最终一致了 |
4 ch2 2021-09-01 18:51:55 +08:00 我给你转 100W,转账失败了 你的钱没多,我的钱扣了 凭空消失 100W 你说事务有啥意义? |
5 Maboroshii 2021-09-01 18:52:09 +08:00 保证原子性... select update 一串操作的时候 。 当然 还要配置隔离级别这种东西。。不过我也基本没咋用过事务.. |
6 GG668v26Fd55CP5W 2021-09-01 18:53:39 +08:00 via iPhone 啊? |
7 zhaorunze 2021-09-01 18:56:38 +08:00 可以不用事务,你可以只创建一个表,其他所有场景都往这个表堆字段,行与行之间不需要共享,就不需要事务了。 |
8 yianing 2021-09-01 18:58:17 +08:00 via Android 账户的余额更改与流水创建必须在一个事务里面 |
9 Yadomin 2021-09-01 18:59:01 +08:00 “意外情况”,“极低概率” 就意味着不用管了? |
10 11232as 2021-09-01 19:02:18 +08:00 事务不是个技术问题,事务是跟业务强相关得... |
11 SlipStupig 2021-09-01 19:58:52 +08:00 事务是用来保证数据库操作时的一致性和完整性啊,原子操作也是用来保证一致性啊,数据之间是有关联的一些你觉得不重要的数据可能会产生连锁反应。 比如:订单库存量,在条件竞争的情况下,可能导致库存数量为负数,在一些特定促销场景下然后导致订单爆单,这个时候公司就遭受了损失,这部分损失你愿意承担嘛? |
12 Kilerd 2021-09-01 20:07:58 +08:00 您说的对! |
13 sadfQED2 2021-09-01 20:09:42 +08:00 via Android 面试的时候需要使用事物 |
14 love 2021-09-01 20:24:59 +08:00 too young 了 你以为就写数据库会出错?你的程序不会抛异常?抛了异常要不要回滚?就这么留着写了一半的数据集? |
15 sy20030260 2021-09-01 20:46:22 +08:00 大部分垃圾代码就是「图个省事」带来的,写的人越省事,后续维护的人越蛋疼 |
16 Senorsen 2021-09-01 21:22:54 +08:00 1L + 10086 哈哈哈哈哈 你操作一次出现异常(比如网络错误)的概率假设是万分之一,十万次操作出现异常的概率是多少?更多次操作呢? 图省事没有事务了,除非用户量很少不到几十几百个,否则用户资源状态不一致,全乱了,导致不可用,怎么办?事后处理修数据怕是都难。 |
17 seeker 2021-09-01 21:55:49 +08:00 处理钱的时候。如果是个博客啥的,没了就没了把。 |
18 billlee 2021-09-01 22:03:34 +08:00 开事务还提升性能啊,innodb 不开事务那其实就是每条语句 auto-commit, 每行写入语句都要刷盘 |
19 zhangxiaodao 2021-09-01 23:10:59 +08:00 大多数时候,事务是和锁一起使用用来控制并发的。非并发情况,用或不用,都是业务对编码的容忍度要求。 但是,小同志,你这个『大不了多几条废数据』的思想不能有啊,写代码还是要严谨,坏习惯不能养。 |
20 shiji 2021-09-01 23:24:56 +08:00 哈哈,这就好比研究导弹干什么,搞一架客机+几组劳动人民从飞机往下一筐一筐扔手榴弹不就完了 不过一个科技公司一旦高层技术人员都是这个思想,并对新来的 /严谨的人嗤之以鼻的话,基本离完蛋不差几年了。 |
21 EscYezi 2021-09-02 01:42:28 +08:00 via iPhone “丢了就丢了”......希望出生产事故的时候楼主还能这么想 |
22 yeqizhang 2021-09-02 02:07:17 +08:00 via Android 标题就起的很唬人,正文又描述的其它 |
23 dayeye2006199 2021-09-02 02:19:06 +08:00 我要是公司领导,我只想把 LZ 拖出去打屁屁 |
24 felixcode 2021-09-02 02:57:09 +08:00 所以其它的可靠性设计在你这样的程序面前全都是个摆设,因为这样的程序在哪都是水桶的最短板。 |
25 yogogo 2021-09-02 07:44:32 +08:00 多表操作的时候 |
26 paranoiddemon 2021-09-02 08:03:19 +08:00 via Android 加事务代码量很大? |
27 murmur 2021-09-02 08:43:11 +08:00 这就是互联网思维,亲爱的用户我是你 X 爱用用不用拉倒,数据丢了就陪你点代金券就当无事发生 |
28 msaionyc 2021-09-02 09:20:10 +08:00 希望以后不会遇到你这种同事 |
29 tabris17 2021-09-02 09:34:01 +08:00 via iPhone 再过几年,你回过头来看当年发的这个帖子,你内心会有多尴尬呀 当然,那时候你可能也已经转行了 |
30 pkoukk 2021-09-02 09:36:50 +08:00 啧啧啧,我上大学的时候都问不出这种问题来。 |
31 cbasil 2021-09-02 09:49:38 +08:00 例如商城里面优惠券使用,如果优惠券已经抵扣了,但是下单是因为用户账户问题下单失败,不用事务怎么处理优惠券还原的问题 |
32 sujin190 2021-09-02 10:33:16 +08:00 恰恰多个操作不在同一个库才更需要事务,哥们,你搞反了 |
33 banmuyutian 2021-09-02 10:43:25 +08:00 逆天 |
34 realpg PRO 楼主,你要是入职哪个第三方支付一定告诉我啊,我多注册接 |
35 heyjei 2021-09-02 11:33:04 +08:00 via Android 你们其实没看到楼主的问题在哪。 楼主的问题是一个 insert 语句还要用 begin transaction, commit 包起来,觉得很麻烦。楼主不知道的是单独的 sql 语句,数据库执行的时候是默认开始并在语句结束后自动提交事务的。 |
36 heyjei 2021-09-02 11:40:42 +08:00 via Android 而我们所说的事务,一般都是指有很多个 sql 语句一起执行的时候,需要用事务包起来,要么全部执行,要么全部不执行。 在这里触发事务回滚的不一定是 SQL 写错了,或者磁盘故障,或者网络故障,更多的时候,我们触发回滚都业务上的逻辑,比如转账的时候,先 sql 减去了一个人的钱,然后通过另外一个 sql 语句发现对方账号锁了,转不进钱,于是这里只需要回滚事务就可以了,不需要重新执行 sql 一步步的恢复现场。 这只是一个简单的例子,数据库的事务远远不止这些。 |
37 heyjei 2021-09-02 11:43:09 +08:00 via Android 善用事务,可以极大的简化和优化你的业务逻辑代码 |
38 kenvix 2021-09-02 11:46:23 +08:00 先不说别的,姑且问一句写过存储过程吗 |
39 darkengine 2021-09-02 12:44:27 +08:00 是否需要提桶跑路 = 调用次数 * 故障发生概率 * 故障后果 由此可知,不能因为“故障发生概率低”就不管 |
40 Felldeadbird 2021-09-02 13:48:00 +08:00 insert 语句也会出错啊。假定你某个 SQL 不稳定,导致一直 sleep 。这时候你 insert 就 wait 状态。你没事务的话,等 wait 结束后,他插入了数据。 |
41 tairan2006 2021-09-02 14:21:02 +08:00 、楼主脑子里没有并发的概念么 |
42 sakasaka 2021-09-02 14:21:25 +08:00 防止安全事故还有就是简化代码逻辑 |
43 zxcslove 2021-09-02 14:23:14 +08:00 就发泄情绪呗,谁还没个情绪了,哈哈哈 |
44 chendy 2021-09-02 16:10:04 +08:00 看了下楼主的历史发帖,细思极恐 |
45 timethinker 2021-09-02 17:31:29 +08:00 事务改善了人们的生活,让我们可以用一个简单的编程模型来屏蔽底层的不确定性,这本身就是一个很伟大想法,但是要善用,很多情况下,问题不在于客观事物本身,而在于人。 |
46 Chinsung 2021-09-02 17:42:29 +08:00 首先开个事务对代码要求也不高吧,在 Spring 加个注解就完事了。分布式事务另说。 其次就是,开不开事务对你实际执行的速度,影响应该没有想象中的大吧? 在多条 sql 的情况下,使用很小的代价就可以获得原子性等等等特性,有啥麻烦的? |
47 goodboy95 2021-09-02 20:02:53 +08:00 我的系统,有些功能前前后后要改十几次数据,没事务会死的 |
48 ninglg 2021-09-02 23:33:57 +08:00 如果只需要考虑正常情况,那程序的世界就太美好了 |
49 zoyua 2021-09-03 10:03:46 +08:00 呃,事务还是很重要的 |
50 xipushi 2021-09-03 17:22:08 +08:00 我碰到 java 代码里面, 基本不需要特别关心事务提交。 同事写了个事务+异步的代码,查了我大半天 ``` @Transactional methodA(){ Object a = reponsitory.save(); async methodB(a.id) //异步调用 ..... //若干操作 } methodB(id){ reponsitory.findById(id) // 这里偶尔查不到数据 } ``` |