Como evitar deadlocks de banco de dados?

Alguns recursos do banco de dados, comoSELECT ... FOR UPDATE eON DELETE CASCADE, são implicitamente vulneráveis ​​a deadlocks porque o banco de dados não especifica qual ordem de bloqueio será usada. eu encontreidois discussões Isso sugere que esse comportamento não é especificado pelo padrão SQL, sem mencionar implementações específicas. Como tal, estou operando sob a suposição de que não podemos controlar a ordem de bloqueio (pelo menos, não é óbvio como fazer isso).

Como devemos evitar os deadlocks do banco de dados se não pudermos confiar na ordem de bloqueio?

Se não devemos evitar impasses (você vai ter que lutar muito para me convencer disso), então o que devemos fazer?

Esta questão pretende ser independente do banco de dados, então, por favor, não me pergunte qual banco de dados eu estou usando.

questionAnswers(2)

yourAnswerToTheQuestion