Handling innoDB deadlock

Eu tenho umDeadlock found when trying to get lock; try restarting transaction erro nas minhas tabelas do InnoDB. Aqui está a consulta:

UPDATE views 
SET visit_cnt = visit_cnt + 1 
WHERE visit_day = DATE(NOW()) 
AND article_id = '4838'

Esta consulta também aciona isso através do acionador ON UPDATE:

UPDATE articles 
SET views = views + 1 
WHERE id = NEW.article.id

Aqui está como eu tentei consertá-lo:

$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);

Minha pergunta: esta é a única maneira de lidar com um impasse? Quero dizer, isso é muito feio e os impasses acontecem de tempos em tempos de qualquer maneira. Existe alguma maneira recomendada de corrigir conflitos?

questionAnswers(3)

yourAnswerToTheQuestion