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

hvordan man undgår dødvande i mysql

Så vidt jeg forstår, opnår en select ikke lås og bør ikke være årsagen til dødvandet.

Hver gang du indsætter/opdaterer/eller sletter en række, erhverves en lås. For at undgå deadlock, skal du derefter sikre dig, at samtidige transaktioner ikke opdaterer rækken i en rækkefølge, der kan resultere i en deadlock. Generelt set, for at undgå dødvande skal du altid anskaffe lås i samme rækkefølge selv i en anden transaktion (f.eks. altid tabel A først, derefter tabel B).

Men hvis du inden for en transaktion kun indsætter i én tabel, er denne betingelse opfyldt, og dette bør normalt ikke føre til et dødvande. Gør du noget andet i transaktionen?

Et dødvande kan dog opstå, hvis der er manglende indekser . Når en række er indsat/opdater/slet, skal databasen kontrollere de relationelle begrænsninger, det vil sige sikre, at relationerne er konsistente. For at gøre det skal databasen kontrollere fremmednøglerne i de relaterede tabeller. Det måske resultere i, at der erhverves en anden lås end den række, der er ændret. Sørg da for altid at have indeks på fremmednøglerne (og selvfølgelig primærnøgler), ellers kan det resultere i en tabellås i stedet for en rækkelås . Hvis bordlås sker, er låsestriden højere, og sandsynligheden for dødvande stiger.

Ikke sikker på, hvad der præcist sker i dit tilfælde, men måske det hjælper.



  1. SQL Oracle LEFT JOIN og SUBQUERY fejl:ORA-00905:mangler nøgleord

  2. KeyCloak User Federation OG DYNAMISKE ROLLER

  3. MYSQL importerer data fra csv ved hjælp af LOAD DATA INFILE

  4. hvordan gemmer man parset xml-fil til en SQLite-database i Android?