สมมติว่าฉันกำลังเรียกใช้แบบสอบถาม
begin tran
update users
set name = 'Jimmy'
where name = 'john'
หากฉันไม่ย้อนกลับธุรกรรมการเปลี่ยนแปลงเหล่านี้จะยังคงเกิดขึ้นมันจะเกิดข้อผิดพลาดหรือจะทำหน้าที่เป็นการย้อนกลับหรือไม่
สมมติว่าฉันกำลังเรียกใช้แบบสอบถาม
begin tran
update users
set name = 'Jimmy'
where name = 'john'
หากฉันไม่ย้อนกลับธุรกรรมการเปลี่ยนแปลงเหล่านี้จะยังคงเกิดขึ้นมันจะเกิดข้อผิดพลาดหรือจะทำหน้าที่เป็นการย้อนกลับหรือไม่
คำตอบ:
คุณต้องเข้าใจว่าธุรกรรมคืออะไร - เป็นหน่วยงานเดียว มันคือทั้งหมดหรือไม่มีอะไร (ตามคุณสมบัติของกรด ) และสิ่งนี้รับประกันความสอดคล้องของฐานข้อมูล
หากฉันไม่ย้อนกลับธุรกรรมการเปลี่ยนแปลงเหล่านี้จะยังคงดำเนินต่อไป
การเปลี่ยนแปลงจะเกิดขึ้นเฉพาะเมื่อคุณกระทำ เซิร์ฟเวอร์ SQL จะบันทึกการเปลี่ยนแปลงทั้งหมดในบันทึกการทำธุรกรรมและเมื่อคุณส่งมอบจะมีการชุบแข็งไฟล์ข้อมูล
หากคุณไม่ยอมรับการทำธุรกรรมของคุณจะยังคงเปิดอยู่โดยไม่มีกำหนดซึ่งคุณสามารถเห็นsys.dm_tran_active_transactions / sys.dm_tran_database_transactions / sys.dm_tran_session_transactionsหรือใช้งานDBCC OPENTRANได้
นอกจากนี้สิ่งที่คุณได้เริ่มต้นนั้นเป็นธุรกรรมที่ชัดเจนซึ่งควรจะจบลงอย่างชัดเจนด้วยคำสั่ง COMMIT หรือ ROLLBACK
อ่านเพิ่มเติม - มันเป็นวิธีปฏิบัติที่ไม่ดีที่จะสร้างธุรกรรมอยู่เสมอหรือไม่
หากคุณไม่ยอมรับและไม่ทำธุรกรรมย้อนกลับธุรกรรมจะยังคงมีอยู่อย่างไม่มีกำหนด มันจะยังคงล็อคที่อาจปิดกั้นช่วงอื่น ๆ จนกว่าคุณจะจบการทำธุรกรรมผ่านcommitหรือrollbackหรือจนกว่า DBA มาพร้อมและฆ่าเซสชั่น หาก DBA ฆ่าเซสชันพวกเขาจะออกโรลแบ็คสำหรับสิ่งนี้และธุรกรรมเปิดอื่น ๆ โดยปริยาย
จะไม่มีการเปลี่ยนแปลงจนกว่าจะมีการทำธุรกรรมและจะไม่มีการเปลี่ยนแปลงใด ๆ หรือทั้งหมดดังที่ได้กล่าวไว้ข้างต้น
Atomicity เป็นเหตุผลที่อยู่เบื้องหลังสิ่งนี้คุณสามารถตรวจสอบคุณสมบัติธุรกรรม ACID ซึ่งเป็นคุณสมบัติพื้นฐานที่ระบบฐานข้อมูลติดตาม