Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Po co dołączać wybrane wyciągi do transakcji?

Masz rację:na standardowym poziomie izolacji , read committed , nie musisz zawijać wybranych wyciągów w transakcjach. Wybrane wyciągi będą chronione przed brudnymi odczytami, niezależnie od tego, czy zapakujesz je w transakcję, czy nie.

connection 1:                          connection 2:

                                       begin transaction
                                       update user set name = 'Bill' where id = 1
select name from users where id = 1
                                       rollback transaction

Instrukcja select nie odczyta wycofanej aktualizacji:nie ma znaczenia, że ​​nie są one zawarte w transakcji.

Jeśli potrzebujesz powtarzalnych odczytów , a następnie zawijanie zaznaczeń w domyślną transakcję nie pomaga:

connection 1:                          connection 2:

begin transaction
select name from users where id = 1
                                       update user set name = 'Bill' where id = 1
select name from users where id = 1
commit transaction

begin i commit instrukcje tu nie pomogą:drugi select może przeczytaj starą nazwę lub może przeczytaj nową nazwę.

Jeśli jednak pracujesz na wyższym poziomie izolacji, na przykład serializable lub repeatable read , grupa będzie chroniona przed jednorazowymi odczytami:

connection 1:                          connection 2:

set transaction isolation level
    repeatable read
begin transaction
select name from users where id = 1
                                       update user set name = 'Bill' where id = 1
select name from users where id = 1              |
commit transaction                               |
                                                 |--> executed here

W tym scenariuszu update zostanie zablokowany do czasu zakończenia pierwszej transakcji.

Wyższe poziomy izolacji są rzadko używane, ponieważ zmniejszają liczbę osób, które mogą jednocześnie pracować w bazie danych. Na najwyższym poziomie, serializable , zapytanie raportujące wstrzymuje wszelkie działania związane z aktualizacją.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwertowanie daty juliańskiej JDE na gregoriańską

  2. Pakiet SSIS nie chce pobierać metadanych tabeli tymczasowej

  3. 4 sposoby na uzyskanie historii zadań SQL Server

  4. Prosta składnia:wiele ograniczeń w instrukcji Alter Table

  5. Identyfikowanie problemów z wydajnością serwera SQL