sql >> Databasteknik >  >> RDS >> Mysql

Låsa ett bord med viloläge

Du måste använda pessimistisk låsning, vilket kan uppnås genom

setLockMode(String alias, LockMode lockMode) 

på frågan och använd LockMode.UPGRADE .

Se Query.setLockMode

Men detta kommer säkerligen att döda skalbarhet och prestanda om du gör mycket åtkomst på det här bordet. Du är bättre att antingen använda en sekvens eller en annan strategi är att skapa en tjänst för att tilldela nummer (t.ex. en SSB) som tar 100 nummer åt gången, uppdaterar databasen och delar ut dem. Det sparar dig 198 databasåtkomster.

UPPDATERING:

Du måste också ändra din bordsdesign något. Det är bättre att ha en enda rad med ett känt ID och att lagra numret du ökar i en annan kolumn. Då bör du uppdatera raden istället för att ta bort den gamla raden och lägga till en ny. Annars fungerar inte radlåsningsstrategin.

UPPDATERING 2:

OP fann att följande fungerade:

session.get(class.Class, id, lockOption)



  1. mysqli-- prepare-sats misslyckas med fel ingen tabell används

  2. 3 sätt att hitta positionen för en delsträng i en sträng i MySQL

  3. MySQL-fråga tar över 6 sekunder

  4. Hur man väljer mysql-rader i ordningen IN-sats