Si está utilizando InnoDB o cualquier RDBMS transaccional de nivel de fila, entonces es posible que cualquier La transacción de escritura puede causar un interbloqueo, incluso en situaciones perfectamente normales. Las tablas más grandes, las escrituras más grandes y los bloques de transacciones largos a menudo aumentarán la probabilidad de que se produzcan interbloqueos. En su situación, probablemente sea una combinación de estos.
La única forma de manejar verdaderamente los interbloqueos es escribir su código para esperarlos. Esto generalmente no es muy difícil si el código de su base de datos está bien escrito. A menudo, solo puede poner un try/catch
alrededor de la lógica de ejecución de la consulta y busque un interbloqueo cuando se produzcan errores. Si detecta uno, lo normal es intentar ejecutar la consulta fallida nuevamente.
Le recomiendo que lea esta página en el manual de MySQL. Tiene una lista de cosas que hacer para ayudar a lidiar con los interbloqueos y reducir su frecuencia.