处理innoDB死锁

Sil*_*ght 7 php mysql deadlock innodb

Deadlock found when trying to get lock; try restarting transaction在InnoDB表上遇到错误.这是查询:

UPDATE views 
SET visit_cnt = visit_cnt + 1 
WHERE visit_day = DATE(NOW()) 
AND article_id = '4838'
Run Code Online (Sandbox Code Playgroud)

此查询还通过ON UPDATE触发器触发此操作:

UPDATE articles 
SET views = views + 1 
WHERE id = NEW.article.id
Run Code Online (Sandbox Code Playgroud)

这是我试图修复它的方式:

$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);
Run Code Online (Sandbox Code Playgroud)

我的问题:这是处理僵局的唯一方法吗?我的意思是这很丑陋,无论如何都会不时发生死锁.有没有推荐的方法来修复死锁?

Zim*_*bao 2

这是关于处理InnoDB 死锁的好文档。

PS:我没有什么要添加的,所以只是给了你链接。