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?
sql-server
Josh Stevenson
sumber
sumber
Jawaban:
Anda harus memahami apa transaksi itu - Ini adalah satu unit kerja. Ini ALL atau NOTHING (mengikuti properti ACID ) dan ini menjamin konsistensi database.
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_transactions
atau gunakanDBCC 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?
sumber
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
commit
ataurollback
atau 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.sumber
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.
sumber