SQL Server: งบกับแบทช์เทียบกับธุรกรรมกับการเชื่อมต่อ


10

คำถามของฉันง่าย: อะไรคือความแตกต่าง / ความเหมือน / cardinalities ระหว่าง

  • การทำธุรกรรม
  • แบทช์
  • การเชื่อมต่อและ
  • งบ

ใน SQL Server

เท่าที่ฉันเข้าใจการเชื่อมต่อเป็นช่องทางการสื่อสารเดียวระหว่างอินสแตนซ์ของ SQL Server และไคลเอนต์ที่คอลเลกชันของคำสั่งที่จัดกลุ่มเป็นชุดงานจะดำเนินการ ชุดจะถูกแมปอย่างชัดเจนหรือชัดเจนกับหนึ่งหรือหลายธุรกรรม ถูกต้องหรือไม่


คำตอบ:


4

ค่อนข้างมาก

ชุดเป็นเพียงชุดของคำสั่งที่ต้องดำเนินการ ทรานแซกชันคือชุดของคำสั่งที่รับประกันว่าจะสำเร็จหรือล้มเหลวโดยสิ้นเชิง (เช่นจะไม่ดำเนินการครึ่งหนึ่งของคำสั่งและล้มเหลวในส่วนที่เหลือหากล้มเหลว

เท่าที่ฉันทราบ SQL Server ใช้ประโยชน์จากการรวมการเชื่อมต่อดังนั้นฉันจะไม่พึ่งพาการเชื่อมต่อเดียวต่อความคิดของลูกค้า


1
ดังนั้นความสำคัญระหว่างแบทช์และธุรกรรมคืออะไร เป็นไปได้หรือไม่ที่จะมีหลายแบทช์ต่อหนึ่งธุรกรรม ในทางกลับกันล่ะ?

1
เท่าที่ฉันทราบว่ามีความเป็นไปได้ที่จะมีหลายธุรกรรมต่อชุด แต่มันเป็นไปไม่ได้ที่จะมีหลายชุดต่อการทำธุรกรรม
Cromulent

6

ทรานแซกชันและแบทช์เป็นแนวคิดอิสระสองประการ ทั้งสองสามารถใช้ในการกำหนดค่าแบบหนึ่งต่อหลาย

ทรานแซคชั่นบล็อกเป็น "หน่วยงาน" เดียวซึ่งเป็นแนวคิดที่ว่า sql ที่กำหนดต้องทำงานอย่างเต็มที่หรือไม่ทำงานเลย ตัวอย่างเช่นหากคุณอัปเดตสองตารางเชื่อมโยงกัน ทั้งสองจะต้องประสบความสำเร็จสำหรับการเปลี่ยนแปลงข้อมูลที่จะมุ่งมั่น [ https://msdn.microsoft.com/en-us/library/ms174377.aspx]

รุ่นที่เป็นแนวคิดของ Microsoft ด้วยเครื่องมือที่สร้างขึ้นโดย Microsoft เช่น sqlcmd และ osql ชุดงานจะช่วยให้มั่นใจถึงแผนการดำเนินการเพียงครั้งเดียว ตัวอย่างเช่นหากคุณสร้างตัวแปรและใช้นอกชุดเครื่องมือจะโยนข้อผิดพลาด [ https://msdn.microsoft.com/en-us/library/ms188037.aspx]

ดังนั้นคุณสามารถมีหลายแบทช์ที่อัปเดตหลายตารางภายในบล็อกธุรกรรมเดียว เท่าที่พวกเขาไม่ได้ละเมิดแผนการดำเนินการแต่ละชุดนั่นคือ

นอกจากนี้ภายในแบทช์คุณสามารถมีบล็อคการทำธุรกรรมได้หลายบล็อกเพื่อให้แน่ใจว่ามีความสมบูรณ์ของข้อมูลระหว่างเอนทิตีฐานข้อมูลเช่นตาราง

การเชื่อมต่อเป็นเพียงจับมือการสื่อสารที่อนุมัติหนึ่งเพื่อเรียกใช้แบบสอบถามบนเซิร์ฟเวอร์

คำสั่งคือแต่ละบรรทัดที่สร้างคิวรี GO (ตัวคั่นแบตช์ T-Sql) และ BEGIN TRANSACTION (ANSI SQL สำหรับการเริ่มต้นบล็อกธุรกรรมใหม่) เป็นทั้งสองคำสั่ง


1

ชุดและการทำธุรกรรมอยู่ในระดับเดียวกัน ชุดคือชุดของคำสั่ง SQL ที่ไม่เกี่ยวข้อง ทรานแซคชันคือชุดของคำสั่ง SQL ที่ดำเนินการ (เท่าที่ผู้ใช้รายอื่นของฐานข้อมูลนั้นเกี่ยวข้อง) เป็นคำสั่งเดียว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.