อธิบายธุรกรรม
ทรานแซคชันเป็นคําสั่ง T-SQL อย่างน้อยหนึ่งคําสั่งที่ถือว่าเป็นหน่วย ถ้าธุรกรรมเดียวล้มเหลว คําสั่งทั้งหมดจะล้มเหลว หากธุรกรรมเสร็จสมบูรณ์ คุณจะทราบว่าคําสั่งการแก้ไขข้อมูลทั้งหมดในธุรกรรมสําเร็จและผูกมัดกับฐานข้อมูลแล้ว
ธุรกรรมให้แน่ใจว่าคําสั่งทั้งหมดภายในธุรกรรมสําเร็จหรือทั้งหมดล้มเหลว ไม่ได้รับอนุญาตให้ดําเนินการให้เสร็จสิ้นบางส่วน ธุรกรรมย่อส่วนการดําเนินการที่ต้องเกิดขึ้นพร้อมกันตามตรรกะ เช่น หลายรายการในตารางที่เกี่ยวข้องที่เป็นส่วนหนึ่งของการดําเนินการเดียว
พิจารณาธุรกิจที่จัดเก็บการซื้อในตาราง Sales.Order และการชําระเงินในตาราง Sales.Payment เมื่อมีคนซื้อบางสิ่งบางอย่างทั้งสองตารางจะต้องได้รับการอัปเดต หากสิ่งนี้ถูกนําไปใช้โดยไม่มีธุรกรรมและข้อผิดพลาดเกิดขึ้นเมื่อมีการเขียนการชําระเงินไปยังฐานข้อมูล การแทรก Sales.Order จะยังคงได้รับการบันทึก และออกจากตารางการชําระเงินโดยไม่มีรายการ
เมื่อสิ่งนี้ถูกประยุกต์ใช้กับธุรกรรม จะมีการสร้างรายการทั้งสองรายการหรือไม่มีรายการใดเลย ถ้ามีข้อผิดพลาดในการเขียนการชําระเงินไปยังตาราง การแทรกใบสั่งจะถูกย้อนกลับ ซึ่งหมายความว่า ฐานข้อมูลอยู่ในสถานะที่สอดคล้องกันเสมอ
ควรสังเกตว่านี่หมายถึงข้อผิดพลาดที่ร้ายแรงเช่น ข้อผิดพลาดของฮาร์ดแวร์หรือเครือข่าย ข้อผิดพลาดในคําสั่ง SQL จะทําให้ทรานแซคชันย้อนกลับในบางกรณีเท่านั้น และเป็นสิ่งสําคัญที่จะต้องตรวจทานหน่วยที่ตามมาในโมดูลนี้เพื่อทําความเข้าใจผลกระทบของการใช้ธุรกรรมอย่างเต็มที่
ธุรกรรมมีชนิดต่างๆ ดังนี้
ธุรกรรมที่ชัดเจน
คําสําคัญ BEGIN TRANSACTION และการเริ่มต้น COMMIT หรือ ROLLBACK และสิ้นสุดแต่ละชุดคําสั่ง สิ่งนี้ช่วยให้คุณสามารถระบุว่าคําสั่งใดที่ต้องผูกมัดหรือย้อนกลับเข้าด้วยกัน
ธุรกรรมโดยนัย
ธุรกรรมจะเริ่มต้นเมื่อธุรกรรมก่อนหน้านี้เสร็จสมบูรณ์แล้ว แต่ละธุรกรรมจะเสร็จสมบูรณ์อย่างชัดเจนด้วยคําสั่ง COMMIT หรือ ROLLBACK
ลักษณะกรด
ระบบการประมวลผลธุรกรรมออนไลน์ (OLTP) ต้องการการทําธุรกรรมเพื่อให้เป็นไปตามลักษณะ "ACID":
- Atomicity – ธุรกรรมแต่ละรายการจะถือว่าเป็นหน่วยเดียว ซึ่งสําเร็จหรือล้มเหลวทั้งหมด ตัวอย่างเช่น ธุรกรรมที่เกี่ยวข้องกับการเดบิตเงินจากบัญชีหนึ่งและเครดิตยอดเงินเดียวกันเข้าบัญชีอื่นจะต้องดําเนินการทั้งสองอย่างให้เสร็จสมบูรณ์ ถ้าการดําเนินการอย่างใดอย่างหนึ่งไม่สามารถดําเนินการให้เสร็จสมบูรณ์ได้ การดําเนินการอื่น ๆ จะต้องล้มเหลว
- ความสอดคล้องกัน – ธุรกรรมสามารถใช้ข้อมูลในฐานข้อมูลจากสถานะที่ถูกต้องหนึ่งไปยังอีกสถานะหนึ่งเท่านั้น สถานะที่เสร็จสิ้นของธุรกรรมจะต้องแสดงการโอนเงินทุนจากบัญชีหนึ่งไปยังอีกบัญชีหนึ่งเพื่อดําเนินการต่อ
- Isolation – ธุรกรรมที่เกิดขึ้นพร้อมกันไม่สามารถรบกวนกันและกันได้ และต้องส่งผลให้สถานะฐานข้อมูลสอดคล้องกัน ตัวอย่างเช่น ในขณะที่ธุรกรรมในการโอนเงินจากบัญชีหนึ่งไปยังอีกบัญชีหนึ่งอยู่ในกระบวนการ ธุรกรรมอื่นที่ตรวจสอบยอดดุลของบัญชีเหล่านี้ต้องส่งคืนผลลัพธ์ที่สอดคล้องกัน ธุรกรรมการตรวจสอบยอดดุลไม่สามารถดึงค่าสําหรับบัญชีหนึ่งที่แสดงยอดดุลก่อนการโอน และค่าสําหรับบัญชีอื่นที่แสดงยอดดุลหลังจากการโอนย้าย
- Durability – เมื่อทรานแซคชันได้รับการบันทึก แล้วจะยังคงถูกผูกมัด หลังจากธุรกรรมการโอนย้ายบัญชีเสร็จสมบูรณ์แล้ว ยอดดุลของบัญชีที่แก้ไขแล้วจะยังคงมีอยู่เพื่อให้ระบบฐานข้อมูลปิดอยู่