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

Deadlock på SELECT/UPDATE

Det er ikke nok at have en serialiserbar transaktion, du skal antyde låsen for at dette virker.

Det serialiserbare isolationsniveau vil stadig normalt opnå den "svageste" type lås, det kan, hvilket sikrer, at de serialiserbare betingelser er opfyldt (gentagelige læsninger, ingen fantomrækker osv.)

Så du griber en delt lås på dit bord, som du senere (i din serialiserbare transaktion) prøver at opgradere til en opdateringslås. Opgraderingen vil mislykkes, hvis en anden tråd holder den delte lås (den vil fungere, hvis ingen anden holder en delt lås).

Du vil sandsynligvis ændre det til følgende:

SELECT * FROM SessionTest with (updlock) WHERE SessionId = @SessionId

Det vil sikre, at der opnås en opdateringslås, når SELECT udføres (så du behøver ikke at opgradere låsen).




  1. Asynkrone databaseindsættelser - python + mysql

  2. Sådan udtrækkes et bestemt n'te tegn fra en streng i SQL

  3. Glemt adgangskode script PHP mysqli

  4. MySql-variabler og php