Обновление с предложением WHERE, которое не является уникальным столбцом, приведет к взаимоблокировке, если другая транзакция ожидает завершения текущей транзакции. Вот быстрый тест:
CREATE TABLE test (pk int PRIMARY KEY, a int);
INSERT INTO test VALUES (0, 0);
INSERT INTO test VALUES (1, 0);
Сессия 1
BEGIN;
SELECT a FROM test WHERE pk=0 FOR UPDATE;
Сессия 2
BEGIN;
SELECT a FROM test WHERE pk=0 FOR UPDATE;
(Сессия 2 теперь заблокирована)
Сессия 1
UPDATE test SET a=1 WHERE a>0;
В сеансе 2 мы получаем ошибку
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
Если в предложении WHERE обновления мы используем только столбец pk, ошибка не возникает.