• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Aruforce
V2EX  ›  程序员

问个 Sql 的问题,修改 一张表需要避免另一张表被修改,该怎么实现?

  •  
  •   Aruforce · Oct 23, 2020 · 2456 views
    This topic created in 2035 days ago, the information mentioned may be changed or developed.
    	
    UPDATE
    	ab
    set
    	pta = x ,
    	version = version + 1
    where
    	id = x
    	and 100 = (
    	select
    		sum(pta)
    	from
    		abf
    	where
    		abf.ab_id = x )
    

    不知道 上面的 SQL 是否可行? read commited

    后面的 abf 是否会被锁表?或者该怎么查看这句 SQL 的或者给点关键字 也行

    9 replies    2020-10-25 23:36:23 +08:00
    Aruforce
        1
    Aruforce  
    OP
       Oct 23, 2020
    求救 dalao
    wangyanrui
        2
    wangyanrui  
       Oct 23, 2020 via Android
    猜测不会,蹲个大佬
    另:执行前上个锁呗😂😂
    dbolo123
        3
    dbolo123  
       Oct 23, 2020
    你想问 select for update ?
    Aruforce
        4
    Aruforce  
    OP
       Oct 24, 2020 via Android
    @dbolo123 不是 select for update 只能锁定已存在的数据 并不能防止新增…我是想避免另一张表被更新…
    Leigg
        5
    Leigg  
       Oct 24, 2020 via Android
    一条 SQL 是原子执行,你提的问题暴露你对 mysql 的生疏程度
    juzi214032
        6
    juzi214032  
       Oct 24, 2020
    你可以直接对另一张表加锁,lock tables
    Aruforce
        7
    Aruforce  
    OP
       Oct 24, 2020
    @Leigg 一句 sql 执行过程中 ,表也可能被其他的 SQL 改变啊
    Aruforce
        8
    Aruforce  
    OP
       Oct 24, 2020
    @juzi214032 试过 lock inshare model ,在 RC 并不能避免插入操作。。在 RR 倒是可以。。。
    juzi214032
        9
    juzi214032  
       Oct 25, 2020
    @Aruforce 不是 lock inshare model,lock inshare model 是行级锁,不是表锁,当然不能避免插入操作。用 LOCK TABLES 命令,就是表锁
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1168 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 17:57 · PVG 01:57 · LAX 10:57 · JFK 13:57
    ♥ Do have faith in what you're doing.