首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL重复键错误导致在重复索引记录上设置共享锁?

MySQL重复键错误导致在重复索引记录上设置共享锁?
EN

Stack Overflow用户
提问于 2014-01-14 10:49:56
回答 1查看 1.6K关注 0票数 4

我读过MySQL 14.2.7.6的文档。由InnoDB中不同的SQL语句设置的锁

http://dev.mysql.com/doc/refman/5.0/en/innodb-locks-set.html

我的问题:

  1. 我不明白为什么文档声明: 如果发生重复键错误,则在重复索引记录上设置共享锁.如果有多个会话试图插入同一行(如果另一个会话已经具有独占锁),则共享锁的这种使用会导致死锁。如果另一个会话删除行,则可能发生这种情况。

既然INSERT操作失败,它为什么要在行上设置一个锁。它是为了什么而获得锁的?

  1. 当“选择.锁定共享模式”正在执行时,是否设置了意图共享(是否)锁?当"UPDATE,INSERT,DELETE“或"SELECT . FOR UPDATE”正在执行时,是否设置了唯一的意图(IX)锁定?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-14 12:09:25

.1。它需要对现有条目进行锁定,以便以后插入重复记录的尝试始终失败:

代码语言:javascript
复制
-- Transaction A
BEGIN TRANSACTION;
INSERT INTO mytable VALUE(1); -- fails as "duplicate"

-- Transaction B
BEGIN;
DELETE FROM mytable WHERE field = 1; -- must be put on hold, see below

-- Transaction A
-- transaction is still in progress
INSERT INTO mytable VALUE(1); -- must fail to stay consistent with the previous attempt

.2。是的,是的

意图锁定协议如下:

  • 在事务可以在表t中的行上获取S锁之前,它必须首先获得ISt上更强的锁。
  • 事务在获得行上的X锁之前,必须先获得t上的IX锁。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21111676

复制
相关文章

相似问题

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