sql >> Databasteknik >  >> RDS >> Sqlserver

Hur utför man en radlåsning?

Med antagandet att detta är MS SQL-server, vill du förmodligen ha UPDLOCK , möjligen kombinerat med ROWLOCK (Tabelltips ). Jag har problem med att hitta en bra artikel som beskriver teorin, men här är ett snabbt exempel:

SELECT id From mytable WITH (ROWLOCK, UPDLOCK) WHERE id = 1 

Detta uttalande kommer att placera ett uppdateringslås på raden under transaktionens varaktighet (så det är viktigt att vara medveten om när transaktionen avslutas). Eftersom uppdateringslås är inkompatibla med exklusiva lås (krävs för att uppdatera poster), detta hindrar någon från att uppdatera denna post tills transaktionen har avslutats.

Observera att andra processer som försöker modifiera denna post kommer att blockeras tills transaktionen slutförs, men kommer att fortsätta med vilken skrivoperation de begärde när transaktionen har avslutats (såvida de inte försvinner eller avbryts som en låst process). Om du vill förhindra detta måste dina andra processer använda ytterligare tips för att antingen avbryta om ett inkompatibelt lås upptäcks, eller hoppa över posten om det har ändrats.

Dessutom Du bör inte använda den här metoden för att låsa poster medan du väntar på användarinput . Om detta är din avsikt bör du lägga till någon sorts "modifierad" kolumn i din tabell istället.

SQL-serverns låsmekanismer är egentligen bara lämpade för användning för att bevara dataintegriteten / förhindra dödlägen - transaktioner bör i allmänhet hållas så korta som möjligt och bör absolut inte underhållas i väntan på användarinput.



  1. Varför mysql händelseschema fungerar inte i databasen localhost?

  2. mysql match mot flera ord

  3. Så här ändrar du språket för din Oracle-session

  4. Hur vet man om en fråga misslyckas i Laravel 4?