lanxiangbo 2016-06-12 13:55 采纳率: 0%
浏览 1656

mysql的for update问题

我在一个int型字段上建了索引,这个字段a大概有(0,1,2,3,4,5,6)这几个值

我使用
select * from table where a in (3,5) for update

然后再另一个session里执行insert
字段A为0,1,6的时候,不会发生锁等待,
字段A为2,3,4,5的时候,发生锁等待

3,5锁等待我能理解,2,4为什么会发生锁等待

我又尝试了一下方法
1、where 条件增加 主键<当前最大主键值
2、使用子查询把select pk from table where pk in (select pk from table where a in (3,5))

都没有效果,为什么?!子查询反而好像整张表都锁了,所有insert都等待了

有没有什么办法可以之锁定3,5的记录,其他记录不影响。

  • 写回答

2条回答 默认 最新

  • Robot-S 2016-06-12 14:01
    关注

    先前介绍过SELECT ... FOR UPDATE的用法,不过锁定(Lock)的资料是判别就得要注意一下了。由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料表单给锁住)。

    举个例子:

    假设有个表单products ,里面有id跟name二......
    答案就在这里:【电商网站】mysql中select * for update锁表的问题
    ----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算