Misalkan saya memiliki pertanyaan:
begin tran
-- some other sql code
Dan kemudian saya lupa untuk berkomitmen atau memutar kembali.
Jika klien lain mencoba menjalankan kueri, apa yang akan terjadi?
sql-server
transactions
commit
Charbel
sumber
sumber
Anda benar-benar dapat mencobanya sendiri, yang akan membantu Anda mengetahui cara kerjanya.
Buka dua jendela (tab) di studio manajemen, masing-masing akan memiliki koneksi sendiri ke sql.
Sekarang Anda dapat memulai transaksi dalam satu jendela, melakukan beberapa hal seperti menyisipkan / memperbarui / menghapus, tetapi belum melakukan. lalu di jendela lain Anda dapat melihat tampilan database dari luar transaksi. Bergantung pada tingkat isolasi, tabel mungkin dikunci sampai jendela pertama dilakukan, atau Anda mungkin (tidak) melihat apa yang telah dilakukan transaksi lain sejauh ini, dll.
Bermain-main dengan tingkat isolasi yang berbeda dan tanpa petunjuk kunci untuk melihat bagaimana pengaruhnya terhadap hasil.
Lihat juga apa yang terjadi jika Anda melakukan kesalahan dalam transaksi.
Sangat penting untuk memahami bagaimana semua hal ini bekerja atau Anda akan bingung dengan apa yang dilakukan sql, sering kali.
Selamat bersenang-senang! GJ.
sumber
Transaksi dimaksudkan untuk berjalan sepenuhnya atau tidak sama sekali. Satu-satunya cara untuk menyelesaikan transaksi adalah dengan berkomitmen, cara lain apa pun akan menghasilkan rollback.
Oleh karena itu, jika Anda memulai dan kemudian tidak melakukan, itu akan dibatalkan saat koneksi ditutup (karena transaksi terputus tanpa menandai sebagai selesai).
sumber
tergantung pada tingkat isolasi dari transaksi masuk.
Isolasi transaksi Sql dijelaskan
sumber
Saat Anda membuka transaksi, tidak ada yang terkunci dengan sendirinya. Tetapi jika Anda menjalankan beberapa kueri di dalam transaksi itu, bergantung pada tingkat isolasi, beberapa baris, tabel, atau halaman akan dikunci sehingga akan memengaruhi kueri lain yang mencoba mengaksesnya dari transaksi lain.
sumber
Contoh Transaksi
mulai tran tt
Pernyataan sql Anda
jika terjadi kesalahan rollback tran tt else commit tran tt
Selama Anda belum mengeksekusi tran tt komit, data tidak akan berubah
sumber
BEGIN TRAN X ... BEGIN TRAN Y ... ROLLBACK Y
tidak berfungsi, misalnya. Lihat stackoverflow.com/questions/1273376/…Selain masalah penguncian potensial yang mungkin Anda sebabkan, Anda juga akan menemukan bahwa log transaksi Anda mulai tumbuh karena tidak dapat dipotong melewati LSN minimum untuk transaksi aktif dan jika Anda menggunakan isolasi snapshot, toko versi Anda di tempdb akan bertambah untuk alasan serupa.
Anda dapat menggunakan
dbcc opentran
untuk melihat detail dari transaksi terbuka terlama.sumber
Setiap transaksi yang belum dilakukan akan membuat server terkunci dan kueri lain tidak akan dijalankan di server. Anda juga perlu mengembalikan transaksi atau melakukannya. Menutup SSMS juga akan menghentikan transaksi yang memungkinkan kueri lain untuk dieksekusi.
sumber
Perilaku tidak ditentukan, jadi Anda harus secara eksplisit menyetel komit atau rollback:
http://docs.oracle.com/cd/B10500_01/java.920/a96654/basic.htm#1003303
Hsqldb melakukan rollback
hasilnya adalah
sumber