MySQL技术问询:哪些DML语句会确切获取排他锁?UPDATE与DELETE是否仅二者?
MySQL中获取排他锁的DML语句及求证
一、会确切获取排他锁(X锁)的DML语句
以下基于InnoDB存储引擎(MySQL主流事务引擎):
INSERT:插入的新行会被加排他锁,防止其他事务修改/删除该行;若触发唯一键冲突,还会对冲突行加排他锁。UPDATE:对匹配的目标行加排他锁,事务期间其他事务无法修改、删除这些行,也不能为其加共享锁(S锁)。DELETE:对匹配的目标行加排他锁,事务期间其他事务无法操作这些行。SELECT ... FOR UPDATE:这是加锁型查询(属于DML范畴的锁操作),会对匹配的行加排他锁,锁会持有到事务结束。INSERT ... ON DUPLICATE KEY UPDATE:插入时若遇唯一键冲突,会先对冲突行加排他锁,再执行更新逻辑。
二、求证:DML语句里仅UPDATE和DELETE会获取排他锁?
答案是否定的。除了UPDATE和DELETE,上述的INSERT、SELECT ... FOR UPDATE、INSERT ... ON DUPLICATE KEY UPDATE等DML操作都会确切获取排他锁。
内容的提问来源于stack exchange,提问作者user19481364
相关产品推荐
相关产品推荐

