在MySQL(5.6或更高版本)中是否有一种机制可以让一个事务(或声明)自愿成为受害者,以防它陷入僵局?
启用InnoDB死锁检测后,当识别出死锁时,InnoDB会确定要杀死哪个事务(成为受害者)以便允许其他事务继续进行。有一种算法用于确定哪个交易是受害者。
我的问题是我们是否可以在会影响算法的语句中使用任何语法,基本上告诉InnoDB“如果此语句/事务涉及死锁,那么选择我作为受害者。”
答案 0 :(得分:1)
“我做的远远好得多......” - TRX#8675309
在死锁情况下将事务终止的当前算法是已更改较少行的事务被终止。如果出现平局,InnoDB内部代码可以任意选择;我们不知道选择的原因。
因此,一个事务可以“自愿”的唯一方法是更改比其他事务更少的行。