sql >> Database >  >> RDS >> Mysql

hoe een impasse in mysql te voorkomen

Voor zover ik begrijp, verwerft een select geen lock en zou niet de oorzaak moeten zijn van de impasse.

Elke keer dat u een rij invoegt/bijwerkt/of verwijdert, wordt een vergrendeling verkregen. Om een ​​impasse te voorkomen, moet u ervoor zorgen dat gelijktijdige transacties de rij niet bijwerken in een volgorde die tot een impasse zou kunnen leiden. Over het algemeen, om een ​​impasse te voorkomen moet je lock altijd in dezelfde volgorde verkrijgen zelfs in verschillende transacties (bijv. altijd eerst tafel A, dan tafel B).

Maar als u binnen één transactie slechts in één tabel invoert, wordt aan deze voorwaarde voldaan, en dit zou dan meestal niet tot een impasse moeten leiden. Doet u iets anders in de transactie?

Een impasse kan echter optreden als er ontbrekende indexen . zijn . Wanneer een rij wordt ingevoegd/bijgewerkt/verwijderd, moet de database de relationele beperkingen controleren, dat wil zeggen, ervoor zorgen dat de relaties consistent zijn. Om dit te doen, moet de database de externe sleutels in de gerelateerde tabellen controleren. Het misschien resulteren in het verkrijgen van een ander slot dan de rij die is gewijzigd. Zorg er dan voor dat u altijd index op de externe sleutels (en natuurlijk primaire sleutels) heeft, anders kan dit resulteren in een table lock in plaats van een rijvergrendeling . Als tafelvergrendeling plaatsvindt, is de vergrendelingsconflict groter en neemt de kans op een impasse toe.

Ik weet niet precies wat er in jouw geval gebeurt, maar misschien helpt het.



  1. 40 vragen die u moet weten over R12.2

  2. Kan geen verbinding maken met postgres vanaf een externe host

  3. Vind waarden die geen getallen bevatten in PostgreSQL

  4. Hoe een onopgelost extern symbool te repareren vanwege MySql Connector C++?