SQL INSERT是否涉及任何读/写锁定?

时间:2013-02-26 08:03:04

标签: mysql insert locking

这是一个非常简单的问题,但我在Google上找不到任何有用的答案。

我一直在读,SELECT上有READ LOCK,UPDATE语句有WRITE LOCK。但是,当我们插入表格时,我试图找出是否有任何类型的LOCK?

假设该表使用InnoDB作为引擎。

3 个答案:

答案 0 :(得分:4)

插入时,InnoDB会创建一个所谓的“间隙锁定”。

The manual describes this quite well

  

在插入行之前,INSERT操作设置了一种称为插入意图间隙锁定的间隙锁定。该锁定表示以这样的方式插入的意图:如果插入到相同索引间隙中的多个事务不插入间隙内的相同位置,则不需要等待彼此。假设存在值为4和7的索引记录。尝试插入值5和6的单独事务在获取插入行上的排它锁之前使用插入意图锁定锁定4和7之间的间隙,但不由于行是非冲突的

,因此会相互阻止

除此之外,任何唯一索引都将为提供的值锁定,以确保两个不同的事务不插入相同的值(如果我',则与间隙锁略有不同我没弄错。)

答案 1 :(得分:0)

对于innoDB,mysql使用行级锁定。 插入时没有要锁定的行,因为您正在创建它。

答案 2 :(得分:0)

添加间隙锁定描述,Mysql INNODB对正在插入的行执行ROW-LOCK。