sql >> Databasteknik >  >> RDS >> Mysql

Hur man undviker tävlingskondition med unika kontroller i Django

Standardsättet är att INTE hantera detta, som:

  1. sannolikheten för fel i ditt fall är nära 0;
  2. felets svårighetsgrad är mycket låg.

Om du av någon anledning måste vara säker på att problemet inte kommer att hända är du på egen hand.

Jag har inte analyserat händelseförloppet i detalj men jag tror att användningen av isoleringsnivån SERIALIZABLE inte riktigt hjälper, det kommer bara att orsaka IntegrityError (eller DatabaseError ) att födas upp på en annan plats.

Åsidosätter Model._perform_unique_checks låter för mig som en dålig idé, du bör hålla dig borta från appatchning om möjligt (och här är möjligt).

När det gäller att använda bordslåset för att förhindra osannolika fel... Tja, jag är inget stort fan så jag kan inte rekommendera det heller.

Här är ett bra svar på en liknande fråga:https://stackoverflow.com/a/3523439/176186 - Jag håller med om att fånga IntegrityError och att försöka igen är förmodligen det enklaste sättet att hantera problemet.

EDIT:Jag hittade detta:Symfony2 - hur återställer man ett unikt begränsningsfel efter att formuläret skickats in? och jag håller med @pids svar.



  1. PHP MySQL grekiska bokstäver som visar ???? märken

  2. Hur man tar bort en kolumn från en tabell i MySQL

  3. Börja visa frågeresultat innan frågan slutar

  4. Ändra det aktuella antalet för ett Auto Increment-värde i MySQL?