sql >> Database teknologi >  >> RDS >> Mysql

Sådan undgår du racetilstand med unikke checks i Django

Standardmåden er IKKE at håndtere dette, som:

  1. sandsynligheden for fejl i dit tilfælde er tæt på 0;
  2. alvorligheden af ​​fejlen er meget lav.

Hvis du af en eller anden grund skal være sikker på, at problemet ikke opstår, er du alene.

Jeg har ikke analyseret rækkefølgen af ​​hændelser i detaljer, men jeg tror, ​​at brug af SERIALIZABLE isolationsniveauet ikke rigtig hjælper, det vil kun forårsage IntegrityError (eller DatabaseError ) for at blive opdraget et andet sted.

Tilsidesættelse af Model._perform_unique_checks Det lyder for mig som en dårlig idé, du må hellere holde dig væk fra abelapning, hvis det er muligt (og her er det muligt).

Hvad angår brugen af ​​bordlåsen for at forhindre usandsynlige fejl... Nå, jeg er ikke en stor fan, så det kan jeg heller ikke anbefale.

Her er et godt svar på et lignende spørgsmål:https://stackoverflow.com/a/3523439/176186 - Jeg er enig i at fange IntegrityError og at prøve igen er nok den nemmeste fornuftige måde at håndtere problemet på.

EDIT:Jeg fandt dette:Symfony2 - hvordan gendannes fra en unik begrænsningsfejl efter formularindsendelse? og jeg er enig i @pids svar.



  1. Hvorfor bliver MySQL InnoDB indsættelser / opdateringer på store tabeller meget langsomme, når der er nogle få indekser?

  2. SQL NØGLER

  3. Hvordan viser jeg kun 5 poster pr. side fra min mysql-databasetabel gennem paginering?

  4. Foretrukken metode til lagring af adgangskoder i databasen