MySQL 只读操作一般需要开启事务吗?

2022-03-08 22:12:24 +08:00
 qua

我之前一般都是开事务的,但是后来发现其实大多数情况下,业务需求并不需要保证 Repetable Read 。MySQL RR 级别下,只读操作不开启事务,可以看成效果和 RC 级别一样吗?

2534 次点击
所在节点    数据库
11 条回复
kingcanfish
2022-03-08 23:36:52 +08:00
只读操作是指 mysql 所有的数据都是只读的 还是指 单个业务只读?前者的话当然可以不需要 后者的话 不行 你还要保证其他 业务的操作 不对当前读操作造成影响
visitant
2022-03-09 02:42:01 +08:00
这要看具体的业务场景了,这种问题肯定是由业务决定
wangyu17455
2022-03-09 03:11:21 +08:00
不开的话,一条 sql 一个事务会不会影响性能?不是很懂
jorneyr
2022-03-09 07:43:50 +08:00
一次执行 100 条 select 开启事务和不开启事务效率差别还是比较大的,写程序测试过。
qua
2022-03-09 08:21:15 +08:00
@jorneyr 一条一个事务性能会更差?
simonlu9
2022-03-09 09:02:16 +08:00
读也是有开事务的,只是 mysql 默认是 autocommit,你不需要手动标记事务开始与结束而已
yibo2018
2022-03-09 10:34:44 +08:00
@simonlu9 可重复读的事务级别下,读没有事务好吧,除非你加上 for update 这种 X 锁,或者 S 锁
update 才会默认 autocommit
yibo2018
2022-03-09 10:35:31 +08:00
@yibo2018 即便加上 for update 也要用先开启事务,才会生效
jorneyr
2022-03-09 14:04:08 +08:00
@qua 是的,前不久进行过测试。
simonlu9
2022-03-09 18:18:31 +08:00
@yibo2018 如果没有开启事务,当前你所读的记录是属于那个版本,怎么保证你读的数据是否是已经提交,可重复读是指你当前的事务里面多次查询保证你看到的结果是一样的,不开启事务怎么实现可重复读
yibo2018
2022-03-10 09:44:07 +08:00
@simonlu9 对对

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

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

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

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

© 2021 V2EX