首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用联接时MySQL锁定

使用联接时MySQL锁定
EN

Stack Overflow用户
提问于 2012-01-30 02:43:44
回答 1查看 2.3K关注 0票数 4

在2表联接查询中选择"FOR UPDATE“时,我有关于mysql/innodb锁定的问题。示例:

2个表- itemsqueuequeue.id是到items.id (外键)的1:1连接。queue.status是带索引的枚举。队列的行数非常少,而items表相对较大。

代码语言:javascript
复制
SELECT *
  FROM `items`
  INNER JOIN queue
    ON items.id = queue.id
  WHERE queue.status = 'new'
  FOR UPDATE;

  1. items中选定的行会被独占锁定吗?
  2. 还会获得哪些其他锁?(显然,除了具有stats='new').
  3. Are的queue表中的所有行外,还有任何可能导致死锁的共享锁。我在某个地方读到了将下一个密钥共享锁插入自动增量索引,然后使用SELECT ... FOR UPDATE (在同一事务中)将锁升级为独占时,很容易发生死锁--2个线程可以获得共享锁,然后它们都会等待对方释放锁,以获得排他锁。在这种情况下(也听说外键可以创建共享锁)是否可能。
EN

回答 1

Stack Overflow用户

发布于 2012-06-09 09:35:40

是的,每一行(*)都将被锁定。你真的不需要担心死锁。创建它需要相当多的时间,当它发生时,主要是客户的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9058779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档