MySQL中UPDATE和INSERT在加锁上有什么区别

MySQL中UPDATE和INSERT在加锁上有什么区别

在MySQL中,UPDATEINSERT在加锁上有一些区别。

锁的范围

  • UPDATE

使用UPDATE只会对需要更新的一行或者多行进行加锁,加的是行锁。

如果还使用了WHERE则还会加上间隙锁,锁住范围内不存在的索引项之间的间隙防止其他事务插入新行。

  • INSERT

INSERT不会加行锁,它会对插入位置加上插入意向锁(Insert Intention Lock)以防止并发插入时死锁。

锁的类型

  • UPDATE

UPDATE会使用排他锁锁住需要更新的行。

  • INSERT

INSERT会使用排他锁来保证数据一致性,插入完成后释放锁。

锁的冲突

  • UPDATE

UPDATE会使用排他锁,故而可能导致锁等待或者死锁。

  • INSERT

并发INSERT时一般不会发生锁冲突。

评论