Untuk menguji cara kerja suatu transaksi, saya menulis t-sql berikut. Karena atribut pertama adalah kunci utama, tidak ada penyisipan yang harus dilakukan. Tapi, penyisipan pertama sudah dilakukan? Mengapa?
begin transaction
insert into instructor
values ('99999', 'Yellow', 'Biology', 700000)
insert into instructor
values ('99999', 'Blue', 'Statistics', 85000)
commit;
select * from instructor where ID = '99999'
--delete from instructor where ID = '99999'
(1 baris terpengaruh) Pesan 2627, Level 14, Status 1, Baris 100 Pelanggaran batasan PRIMARY KEY 'PK__instruct__3214EC278C8DA99F'. Tidak dapat memasukkan kunci duplikat ke objek 'dbo.instructor'. Nilai kunci duplikat adalah (99999). Pernyataan itu telah dihentikan.
Waktu penyelesaian: 06-11-2019T14:02:27.3436411+02:00
XACT_ABORT
adalahOFF
, karena pelanggaran kunci duplikat hanya membatalkan penyisipan kedua, dan bukan transaksi secara keseluruhan, sehinggaCOMMIT
tetap terjadi. Jika Anda melakukanSET XACT_ABORT ON
terlebih dahulu, komit tidak akan terjadi. Aturan pasti tentang apa yang benar-benar membatalkan dan tidak membatalkan suatu transaksi sangat rumit, bahkan jikaXACT_ABORT
dapat menyederhanakan banyak hal. - person Jeroen Mostert   schedule 06.11.2019