sql >> Database >  >> RDS >> Sqlserver

Inzicht in SQL Server LOCKS op SELECT-query's

Een SELECT in SQL Server plaatst een gedeeld slot op een tabelrij - en een tweede SELECT zou ook een gedeeld slot vereisen, en die zijn compatibel met elkaar.

Dus niemand - niemand SELECT kan geen andere SELECT blokkeren .

Wat de WITH (NOLOCK) query-hint wordt gebruikt om gegevens te kunnen lezen die worden ingevoegd (door een andere verbinding) en die nog niet zijn vastgelegd.

Zonder die vraaghint, een SELECT kan worden geblokkeerd bij het lezen van een tabel door een lopende INSERT (of UPDATE ) verklaring die een exclusieve . plaatst lock op rijen (of mogelijk een hele tabel), totdat de transactie van die operatie is gepleegd (of teruggedraaid).

Probleem van de WITH (NOLOCK) hint is:u leest mogelijk gegevensrijen die uiteindelijk helemaal niet worden ingevoegd (als de INSERT transactie wordt teruggedraaid) - zodat uw b.v. rapport kan gegevens tonen die nooit echt zijn vastgelegd in de database.

Er is nog een vraaghint die nuttig kan zijn - WITH (READPAST) . Dit instrueert de SELECT commando om alle rijen over te slaan die het probeert te lezen en die exclusief zijn vergrendeld. De SELECT blokkeert niet en leest geen "vuile" niet-toegewezen gegevens - maar het kan enkele rijen overslaan, b.v. laat niet al je rijen in de tabel zien.



  1. PHP-array opslaan in MySQL?

  2. SQL MAX() voor beginners

  3. Fix "ERROR 1136 (21S01):Kolomtelling komt niet overeen met waardetelling in rij 1" bij het invoegen van gegevens in MariaDB

  4. Oracle Trigger ORA-04098:trigger is ongeldig en hervalidatie mislukt