MySQL死锁后如何重新启动事务

9

我在MySQL中遭遇了死锁问题。如何配置MySQL,在遇到死锁时自动重新启动事务?

4个回答

7
你无法自动执行此操作,因为发生了死锁,两个事务试图修改相同的数据。如果你知道只需再次尝试相同的语句即可,请在应用程序中实现此操作。
然而,让数据库自动执行此操作是不负责任的,因为在可能需要查看数据库中的新情况后,应用程序才会发出潜在的修改语句(如果有)。

你能否提供一些Java(带有Hibernate)客户端重试已回滚事务的示例代码? - Ashish Sharma

6

你能否提供一些Java(带有Hibernate)客户端重试已回滚事务的示例代码? - Ashish Sharma

3

重新启动事务的意思是:

  • (可选) 初始化一个新的数据库连接句柄;
  • 执行第一行代码或函数,开始一个新的事务并重试整个执行路径,直到commit操作。

由于数据库引擎无法知道在死锁发生后将执行哪些查询,因此它无法为您重试整个过程(更不用说应用程序逻辑可能会根据新更改的数据库数据执行不同的查询了)。


0

嗯,你不能这样做,也没有意义。如何处理死锁取决于你的应用程序以及业务逻辑,例如捕获异常、等待几秒钟、重试x次等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接