sql >> Database >  >> RDS >> Mysql

Hoe racecondities te vermijden met unieke controles in Django

De standaardmanier is om dit NIET aan te pakken, zoals:

  1. de kans op falen in uw geval is bijna 0;
  2. de ernst van de storing is erg laag.

Als u er om de een of andere reden zeker van moet zijn dat het probleem niet zal optreden, staat u er alleen voor.

Ik heb de volgorde van gebeurtenissen niet in detail geanalyseerd, maar ik denk dat het gebruik van het SERIALIZABLE-isolatieniveau niet echt zal helpen, het zal alleen IntegrityError veroorzaken (of DatabaseError ) om op een andere plaats op te groeien.

Overschrijven van Model._perform_unique_checks klinkt voor mij als een slecht idee, je kunt maar beter wegblijven van het patchen van apen indien mogelijk (en hier is het is mogelijk).

Wat betreft het gebruik van de tafelvergrendeling om onwaarschijnlijke fouten te voorkomen... Nou, ik ben geen grote fan, dus ik kan dat ook niet aanbevelen.

Hier is een aardig antwoord op een vergelijkbare vraag:https://stackoverflow.com/a/3523439/176186 - Ik ben het ermee eens dat het vangen van IntegrityError en opnieuw proberen is waarschijnlijk de gemakkelijkste manier om het probleem op te lossen.

EDIT:ik heb dit gevonden:Symfony2 - hoe te herstellen van een unieke beperkingsfout na het indienen van een formulier? en ik ben het eens met het antwoord van @pid.



  1. Recursieve query in SQL Server

  2. Controleren of een niet-LOB-kolom moet worden bijgewerkt

  3. MySQL-draaitabellen - rijen naar kolommen. Vraag

  4. Mysql formatteert een string zoals XXXXXXXXXXXX naar XX-XX-XXXXXXX-X