V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Aruforce
V2EX  ›  程序员

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

  •  
  •   Aruforce · 2020-10-23 18:31:04 +08:00 · 1675 次点击
    这是一个创建于 1483 天前的主题,其中的信息可能已经有所发展或是发生改变。
    	
    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 条回复    2020-10-25 23:36:23 +08:00
    Aruforce
        1
    Aruforce  
    OP
       2020-10-23 18:32:38 +08:00
    求救 dalao
    wangyanrui
        2
    wangyanrui  
       2020-10-23 19:48:43 +08:00 via Android
    猜测不会,蹲个大佬
    另:执行前上个锁呗😂😂
    dbolo123
        3
    dbolo123  
       2020-10-23 22:11:51 +08:00
    你想问 select for update ?
    Aruforce
        4
    Aruforce  
    OP
       2020-10-24 09:34:49 +08:00 via Android
    @dbolo123 不是 select for update 只能锁定已存在的数据 并不能防止新增…我是想避免另一张表被更新…
    Leigg
        5
    Leigg  
       2020-10-24 10:51:26 +08:00 via Android
    一条 SQL 是原子执行,你提的问题暴露你对 mysql 的生疏程度
    juzi214032
        6
    juzi214032  
       2020-10-24 21:08:38 +08:00
    你可以直接对另一张表加锁,lock tables
    Aruforce
        7
    Aruforce  
    OP
       2020-10-24 21:12:07 +08:00
    @Leigg 一句 sql 执行过程中 ,表也可能被其他的 SQL 改变啊
    Aruforce
        8
    Aruforce  
    OP
       2020-10-24 21:14:30 +08:00
    @juzi214032 试过 lock inshare model ,在 RC 并不能避免插入操作。。在 RR 倒是可以。。。
    juzi214032
        9
    juzi214032  
       2020-10-25 23:36:23 +08:00
    @Aruforce 不是 lock inshare model,lock inshare model 是行级锁,不是表锁,当然不能避免插入操作。用 LOCK TABLES 命令,就是表锁
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2390 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 16:11 · PVG 00:11 · LAX 08:11 · JFK 11:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.