qua
V2EX  ›  数据库

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

  •  
  •   qua · Mar 8, 2022 · 3705 views
    This topic created in 1707 days ago, the information mentioned may be changed or developed.

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

    11 replies  •  2022-03-10 09:44:07 +08:00
    kingcanfish
    kingcanfish
    Mar 8, 2022
    1
    只读操作是指 mysql 所有的数据都是只读的 还是指 单个业务只读?前者的话当然可以不需要 后者的话 不行 你还要保证其他 业务的操作 不对当前读操作造成影响
    visitant
    visitant
    Mar 9, 2022
    2
    这要看具体的业务场景了,这种问题肯定是由业务决定
    wangyu17455
    wangyu17455
    Mar 9, 2022 via Android
    3
    不开的话,一条 sql 一个事务会不会影响性能?不是很懂
    jorneyr
    jorneyr
    Mar 9, 2022
    4
    一次执行 100 条 select 开启事务和不开启事务效率差别还是比较大的,写程序测试过。
    qua
    qua
    OP
    Mar 9, 2022 via Android
    5
    @jorneyr 一条一个事务性能会更差?
    simonlu9
    simonlu9
    Mar 9, 2022❤️1
    6
    读也是有开事务的,只是 mysql 默认是 autocommit,你不需要手动标记事务开始与结束而已
    yibo2018
    yibo2018
    Mar 9, 2022
    7
    @simonlu9 可重复读的事务级别下,读没有事务好吧,除非你加上 for update 这种 X 锁,或者 S 锁
    update 才会默认 autocommit
    yibo2018
    yibo2018
    Mar 9, 2022
    8
    @yibo2018 即便加上 for update 也要用先开启事务,才会生效
    jorneyr
    jorneyr
    Mar 9, 2022
    9
    @qua 是的,前不久进行过测试。
    simonlu9
    simonlu9
    Mar 9, 2022
    10
    @yibo2018 如果没有开启事务,当前你所读的记录是属于那个版本,怎么保证你读的数据是否是已经提交,可重复读是指你当前的事务里面多次查询保证你看到的结果是一样的,不开启事务怎么实现可重复读
    yibo2018
    yibo2018
    Mar 10, 2022
    11
    @simonlu9 对对
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2438 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 12:29 · PVG 20:29 · LAX 04:29 · JFK 07:29
    ♥ Do have faith in what you're doing.