V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ddllzz
V2EX  ›  问与答

关于 MySQL 死锁的疑问

  •  
  •   ddllzz · 2021-09-02 18:28:09 +08:00 · 936 次点击
    这是一个创建于 938 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不使用事务就不会出现死锁吗? image.png

    8 条回复    2021-09-03 01:10:10 +08:00
    liprais
        1
    liprais  
       2021-09-02 18:31:57 +08:00 via iPhone
    你是如何做到不使用事务的?
    Euthpic
        2
    Euthpic  
       2021-09-02 23:25:19 +08:00 via Android
    @liprais 不用 innodb 咯
    ddllzz
        3
    ddllzz  
    OP
       2021-09-02 23:30:17 +08:00 via Android
    @liprais 啊,没开启事务不就是不使用吗?

    有些定时统计的任务,如果确保了幂等性,那即使某次统计出现偶发的异常,且没有回滚,在下一次定时任务正常执行之后,也能得到正确的数据。

    现在的问题是,多线程下,没有开启事务,却偶尔会出现死锁。是不是一条更新语句,会执行很多个加锁动作,导致了死锁?
    ddllzz
        4
    ddllzz  
    OP
       2021-09-02 23:31:42 +08:00 via Android
    @Euthpic 用了 InnoDB 没开启事务,也是有事务的吗
    mikulch
        5
    mikulch  
       2021-09-03 00:01:50 +08:00
    @ddllzz 不是的,事务必须要靠你自己开启。
    至于死锁的问题,理论上来说不用事务的话,确实不太可能造成死锁,除非你数据库扛不住了出现问题。
    ddllzz
        6
    ddllzz  
    OP
       2021-09-03 00:08:04 +08:00 via Android
    @mikulch 嗯嗯,感谢解答
    Euthpic
        7
    Euthpic  
       2021-09-03 00:30:57 +08:00 via Android
    @ddllzz innodb 每个提交都是以事务为单位,你写一条简单的 select 也会开隐式事务的
    ddllzz
        8
    ddllzz  
    OP
       2021-09-03 01:10:10 +08:00
    @Euthpic #7 涨知识了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3229 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:40 · PVG 19:40 · LAX 04:40 · JFK 07:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.