Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apa gunanya menyertakan pernyataan tertentu dalam suatu transaksi?

Anda benar:pada tingkat isolasi standar , read committed , Anda tidak perlu membungkus pernyataan tertentu dalam transaksi. Pilih pernyataan akan dilindungi dari pembacaan kotor apakah Anda membungkusnya dalam suatu transaksi atau tidak.

connection 1:                          connection 2:

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

Pernyataan pilih tidak akan membaca pembaruan yang dibatalkan:tidak masalah bahwa mereka tidak dibungkus dalam transaksi.

Jika Anda membutuhkan bacaan yang dapat diulang , lalu membungkus pilihan dalam transaksi default tidak membantu:

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 dan commit pernyataan tidak akan membantu di sini:select kedua mungkin membaca nama lama, atau mungkin baca nama barunya.

Namun, jika Anda menjalankan pada tingkat isolasi yang lebih tinggi, seperti serializable atau repeatable read , grup akan dilindungi dari pembacaan yang tidak dapat diulang:

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

Dalam skenario ini, update akan memblokir sampai transaksi pertama selesai.

Tingkat isolasi yang lebih tinggi jarang digunakan karena mereka menurunkan jumlah orang yang dapat bekerja di database secara bersamaan. Pada level tertinggi, serializable , kueri pelaporan menghentikan aktivitas pembaruan apa pun.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. VMware CPU Hot Plug vNUMA Effects pada SQL Server

  2. Sintaks salah di dekat kata kunci 'current_timestamp' - Tetapi hanya pada satu Database

  3. Hitung Hari Hadir dan absen dari tabel

  4. jika saya ingin menemukan apa yang mereferensikan objek di SQL Server, apakah mencari syscomments komprehensif?

  5. Rata-rata dan Kasus dalam SQL