MySQl 这个sql 加锁的过程是什么样的recordTypesyncIdsyncCode这三个都是普通字段不是主键或唯一键insert into sync_fail recordTypesyncIdsyncCode values ON DUPLICATE KEY update retries = 0status = 100errorMsg = nullallowRetry = 0
MySQL的加锁过程分为两种锁:行锁和表锁。
对于这个SQL语句中的insert和update操作,MySQL会为其加上行锁,即在插入或更新某一行数据时,会对该行数据进行加锁,防止其他事务同时对该行数据进行操作。
具体加锁的过程如下:
-
当一个事务执行insert操作时,MySQL会在插入的数据行上加上排他锁,即X锁,防止其他事务同时插入同一行数据。
-
当一个事务执行update操作时,MySQL会在需要更新的数据行上加上排他锁,即X锁,防止其他事务同时对该行数据进行操作。
-
如果两个事务同时对同一行数据进行操作,其中一个事务会被阻塞,直到另一个事务完成操作并释放锁。
对于这个SQL语句中的ON DUPLICATE KEY update操作,如果在执行插入操作时发现有唯一键或主键重复的情况,MySQL会转为执行更新操作,并且也会对需要更新的数据行加上排他锁,即X锁。
因此,在执行这个SQL语句时,MySQL会对需要插入或更新的数据行进行加锁,保证事务之间的数据操作的正确性和并发性。
原文地址: https://www.cveoy.top/t/topic/fjwn 著作权归作者所有。请勿转载和采集!