Jika Anda tidak mengembalikan transaksi apakah perubahan masih akan dilakukan?

10

Katakanlah saya menjalankan kueri

begin tran

update users
set name = 'Jimmy'
where name = 'john'

Jika saya TIDAK mengembalikan transaksi, apakah perubahan ini masih akan dibuat, apakah akan menimbulkan kesalahan atau akankah itu bertindak sebagai pengembalian?

Josh Stevenson
sumber
Saya kira itu tergantung pada perilaku perangkat lunak klien yang Anda gunakan untuk menjalankan pernyataan ini atau aplikasi di mana mereka tertanam. Beberapa mungkin melakukan komit otomatis jika dikonfigurasi (SSMS akan melakukannya secara default).
mustaccio
3
Transaksi yang dinyatakan secara eksplisit tidak melakukan komitmen otomatis. Karena Josh telah menyatakan dimulainya transaksi, itu akan berperilaku tepat seperti yang dijawab Justin Cave.
Dave

Jawaban:

16

Anda harus memahami apa transaksi itu - Ini adalah satu unit kerja. Ini ALL atau NOTHING (mengikuti properti ACID ) dan ini menjamin konsistensi database.

Jika saya TIDAK mengembalikan transaksi, apakah perubahan ini masih akan dilakukan

Perubahan hanya akan dilakukan jika Anda melakukan. SQL server akan mencatat semua perubahan pada log transaksi dan setelah Anda melakukan, mereka diperkeras ke file data.

Jika Anda tidak berkomitmen, maka transaksi Anda akan tetap BUKA tanpa batas - yang dapat Anda lihat sys.dm_tran_active_transactions / sys.dm_tran_database_transactions / sys.dm_tran_session_transactionsatau gunakan DBCC OPENTRAN.

Juga, apa yang telah Anda mulai adalah transaksi eksplisit , yang harus diakhiri secara eksplisit dengan pernyataan COMMIT atau ROLLBACK.

Baca juga - Apakah praktik yang buruk untuk selalu membuat transaksi?

Kin Shah
sumber
@ JoshStevenson Saya pikir nilainya saat membaca tentang Operasi Atom dalam konteks database.
Nelz
12

Jika Anda tidak melakukan atau mengembalikan transaksi, transaksi akan terus ada tanpa batas waktu. Itu akan terus menahan kuncinya, berpotensi memblokir sesi lain, sampai Anda mengakhiri transaksi melalui a commitatau rollbackatau sampai DBA datang dan membunuh sesi (atau sampai sesuatu seperti cegukan jaringan menyebabkan koneksi gagal). Jika DBA membunuh sesi, mereka secara implisit akan mengeluarkan rollback untuk ini dan transaksi terbuka lainnya.

Gua Justin
sumber
Ini jawaban yang tepat. Tanpa informasi ini, tidak masuk akal bagi saya untuk menggunakan pernyataan COMMIT dan ROLLBACK sama sekali.
Tarec
1

Perubahan tidak akan dilakukan sampai dan kecuali transaksi dilakukan, semua atau tidak sama sekali seperti yang disebutkan di atas,

Atomicity adalah alasan di balik ini, Anda dapat memeriksa properti transaksi ACID, itu adalah properti fundamental yang diikuti oleh sistem database.

Mitesh bisht
sumber