Я обнаружил тупик при попытке получить блокировку; попробуйте перезапустить ошибку транзакции
в моих таблицах InnoDB. Вот запрос:
UPDATE views
SET visit_cnt = visit_cnt + 1
WHERE visit_day = DATE(NOW())
AND article_id = '4838'
Этот запрос также запускает это через триггер ON UPDATE:
UPDATE articles
SET views = views + 1
WHERE id = NEW.article.id
Вот как я пытался это исправить:
$attempts_left = 5;
do
{
mysql_query ($query);
// if we found a deadlock, we will try this query 4 more times
if (mysql_errno () == 1213) { // 1213 - deadlock error
$deadlocked = true;
$attempts_left --;
}
else{
$deadlocked = false;
}
}
while($deadlocked && $attempts_left > 0);
Мой вопрос: это единственный способ справиться с тупиковой ситуацией? Я имею в виду, что это довольно уродливо, и время от времени случаются тупики. Есть ли какой-либо рекомендуемый способ исправить взаимоблокировки?