vlambda博客
学习文章列表

MySQL 做插入操作时是否会加锁?


MySQL 默认使用 InnoDB,这也是我们平时最多的存储引擎。当 InnoDB 引擎插入数据时,其实也加锁了。这个锁叫做插入意向锁,这个锁是加在索引上的,防止多个事务同时插入数据时的主键冲突。当事务 A 想表中插入 ID 为 1的数据时,MySQL 会在索引上增加一个插入意向锁把ID为1的节点进行锁定,此时如果事务 B 又向表中插入 ID 为 1 的数据此时事务将处于等待状态,等待事务 A 结束,如果事务A提交了,事务B将返回主键冲突,如果事务 A 回滚了则事务 B 插入成功同时加上 ID 为 1 的插入意向锁。