MySQL中UPDATE和INSERT在加锁上有什么区别
在MySQL中,UPDATE
和INSERT
在加锁上有一些区别。
锁的范围
- UPDATE
使用UPDATE只会对需要更新的一行或者多行进行加锁,加的是行锁。
如果还使用了WHERE
则还会加上间隙锁,锁住范围内不存在的索引项之间的间隙防止其他事务插入新行。
- INSERT
INSERT不会加行锁,它会对插入位置加上插入意向锁(Insert Intention Lock)以防止并发插入时死锁。
锁的类型
- UPDATE
UPDATE会使用排他锁锁住需要更新的行。
- INSERT
INSERT会使用排他锁来保证数据一致性,插入完成后释放锁。
锁的冲突
- UPDATE
UPDATE会使用排他锁,故而可能导致锁等待或者死锁。
- INSERT
并发INSERT时一般不会发生锁冲突。