sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan udfører man en rækkelås?

Med den antagelse, at dette er MS SQL-server, vil du sandsynligvis have UPDLOCK , muligvis kombineret med ROWLOCK (Tabeltips ). Jeg har problemer med at finde en anstændig artikel, der beskriver teorien, men her er et hurtigt eksempel:

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

Denne erklæring vil placere en opdateringslås på rækken i transaktionens varighed (så det er vigtigt at være opmærksom på, hvornår transaktionen afsluttes). Da opdateringslåse er inkompatible med eksklusive låse (påkrævet for at opdatere registreringer), dette vil forhindre nogen i at opdatere denne post, indtil transaktionen er afsluttet.

Bemærk, at andre processer, der forsøger at ændre denne registrering, vil blive blokeret, indtil transaktionen er fuldført, men vil fortsætte med den skriveoperation, de anmodede om, når transaktionen er afsluttet (medmindre de er timeout eller slået ihjel som en fastlåst proces). Hvis du ønsker at forhindre dette, skal dine andre processer bruge yderligere tip for enten at afbryde, hvis en inkompatibel lås opdages, eller springe posten over, hvis den har ændret sig.

Desuden Du bør ikke bruge denne metode til at låse poster, mens du venter på brugerinput . Hvis dette er din hensigt, bør du i stedet tilføje en slags "ved at blive ændret"-kolonne til din tabel.

SQL-serverens låsemekanismer er egentlig kun egnede til brug for at bevare dataintegriteten / forhindre dødvande - transaktioner bør generelt holdes så korte som muligt og bør bestemt ikke vedligeholdes, mens du venter på brugerinput.



  1. Forbered en ny VM til SQL Server 2014 CTP1

  2. Yii Forenet tabel, men ikke alle valgte data hentes

  3. PostgreSQL:nogle problemer at indsætte fra vælg med på konflikt

  4. Hvordan får man MySql 8 til at køre med laravel?