1. ธุรกรรมคืออะไร?
ธุรกรรมคือกลไก ลำดับการดำเนินการซึ่งประกอบด้วยชุดคำสั่งการดำเนินการฐานข้อมูล และคำสั่งทั้งหมดจะถูกส่งไปยังระบบโดยรวม
หรือยกเลิกการร้องขอการดำเนินการ นั่นคือ ฐานข้อมูลกลุ่มนี้ทั้งหมดจะถูกดำเนินการ หรือไม่มีการดำเนินการใดเลย เหมาะอย่างยิ่งสำหรับระบบฐานข้อมูลที่ดำเนินการโดยผู้ใช้หลายคนในเวลาเดียวกัน
ธุรกรรมคือชุดของการดำเนินการที่ทำเป็นหน่วยลอจิคัลเดียวของงาน
หน่วยลอจิคัลของงานต้องมีคุณลักษณะ 4 ประการ:
ความเป็นอะตอมมิก: ธุรกรรมคือการดำเนินการที่สมบูรณ์ และองค์ประกอบของธุรกรรมไม่สามารถแบ่งออกได้อีก องค์ประกอบทั้งหมดจะต้องคอมมิตหรือย้อนกลับโดยรวม
ความสอดคล้อง: เมื่อธุรกรรมเสร็จสมบูรณ์ ข้อมูลจะต้องอยู่ในสถานะที่สอดคล้องกัน
การแยก: ธุรกรรมที่เกิดขึ้นพร้อมกันทั้งหมดจะถูกแยกออกจากกันเมื่อมีการแก้ไขข้อมูล
ความทนทาน: หลังจากธุรกรรมเสร็จสิ้น ผลกระทบต่อระบบจะคงอยู่อย่างถาวร
2. สร้างธุรกรรม
เริ่มต้นการทำธุรกรรม: เริ่มต้นการทำธุรกรรม
กระทำธุรกรรม: กระทำธุรกรรม
ธุรกรรมย้อนกลับ (เลิกทำ): ธุรกรรมย้อนกลับ
รหัส
ใช้สตั๊ด
ไป
ถ้ามี (เลือก * จาก sysobjects โดยที่ name = 'bank')
วางโต๊ะธนาคาร
สร้างธนาคารตาราง
-
ถ่านชื่อลูกค้า (10), --ชื่อลูกค้า
เงินปัจจุบัน เงิน --สมดุล
-
ไป
--เพิ่มข้อจำกัดในการตรวจสอบว่ายอดคงเหลือในบัญชีต้องไม่ต่ำกว่า 1
เปลี่ยนธนาคารตาราง
เพิ่มข้อจำกัด CK_currentMoney เช็ค (currentMoney >= 1)
ไป
ใส่เข้าไปในมูลค่าธนาคาร('Zhang San',1000)
ใส่เข้าไปในค่าธนาคาร('李思',1)
เลือก * จากธนาคาร
-------------------------------------------------- -------------------------------------------------- --------
--------------- * * * * 事* * 事* * * * -------------
-------------------------------------------------- -------------------------------------------------- --------
ใช้สตั๊ด
ไป
กำหนด nocount บน --อย่าแสดงข้อมูลหมายเลขแถวที่ได้รับผลกระทบ
พิมพ์ 'ข้อมูลก่อนการทำธุรกรรม:'
เลือก * จากธนาคาร
ไป
เริ่มการทำธุรกรรม
ประกาศ @errorSum int
ตั้งค่า @errorSum=0
อัปเดตชุดธนาคาร currentMoney = currentMoney-1000 โดยที่ชื่อลูกค้า = 'Zhang San'
อัปเดตชุดธนาคาร currentMoney = currentMoney+1000 โดยที่ชื่อลูกค้า='李思'
ตั้ง @errorSum = @errorSum + 1
พิมพ์ 'ข้อมูลในการทำธุรกรรม:'
เลือก * จากธนาคาร
ถ้า @errorSum <> 0
เริ่ม
พิมพ์ 'ธุรกรรมล้มเหลว ธุรกรรมย้อนกลับ'
ธุรกรรมย้อนกลับ
จบ
อื่น
เริ่ม
พิมพ์ 'การทำธุรกรรมสำเร็จ, การทำธุรกรรม, เขียนลงฮาร์ดดิสก์, บันทึกอย่างถาวร'
กระทำธุรกรรม
จบ
ไป
พิมพ์ 'ข้อมูลหลังการทำธุรกรรม:'
เลือก * จากธนาคาร
-------------------------------------------------- -------------------------------------------------- --------
--------------- * * * * การอ้างอิง* * การอ้างอิง* * * * -------------
-------------------------------------------------- -------------------------------------------------- --------
--ดัชนี: เป็นวิธีการภายในของ SQL Server เพื่อจัดระเบียบข้อมูล
--ดัชนีสามารถแบ่งออกเป็นสามประเภทดังต่อไปนี้;
--ดัชนีที่ไม่ซ้ำ: ไม่อนุญาตให้สองแถวมีค่าดัชนีเดียวกัน
--ดัชนีคีย์หลัก: ดัชนีคีย์หลักชนิดพิเศษที่สร้างดัชนีเฉพาะโดยอัตโนมัติเมื่อกำหนดคีย์หลักสำหรับตาราง แต่ละค่าในคีย์หลักจะต้องไม่ซ้ำกัน
--ดัชนีแบบคลัสเตอร์: ลำดับทางกายภาพของแถวในตารางเหมือนกับลำดับตรรกะ (ดัชนี) ของค่าคีย์ ตารางสามารถมีดัชนีแบบคลัสเตอร์ได้เพียงดัชนีเดียวเท่านั้น (สามารถเข้าใจได้ว่าเป็นพินอินของพจนานุกรม)
--ดัชนีที่ไม่เป็นคลัสเตอร์: ข้อมูลและดัชนีประกอบด้วยจุดไปยังตำแหน่งที่สอดคล้องกันซึ่งข้อมูลถูกเก็บไว้ ลำดับทางกายภาพของแถวในตารางไม่ตรงกับลำดับตรรกะของค่าคีย์ (สามารถเข้าใจได้ว่า MAP)
--ดัชนีแบบคลัสเตอร์จะเร็วกว่าดัชนีที่ไม่ใช่แบบคลัสเตอร์
--สามารถมีได้เพียงดัชนีเดียวในตาราง แต่สามารถมีดัชนีที่ไม่ใช่คลัสเตอร์ได้หลายรายการ หากคุณตั้งค่าคอลัมน์เป็นคีย์หลัก คอลัมน์นั้นจะเป็นดัชนีแบบคลัสเตอร์ตามค่าเริ่มต้น
--ตารางไม่สามารถมีดัชนีได้ และดัชนีคีย์หลักไม่จำเป็นต้องเป็นดัชนีแบบคลัสเตอร์
--ดัชนีใช้อยู่ที่ไหน?
--คอลัมน์นี้ถูกค้นหาบ่อยครั้งและใช้ในการจัดเรียงข้อมูล
--ประเภทที่ไม่ดีมีค่าที่แตกต่างกันเพียงเล็กน้อยและมีข้อมูลเพียงไม่กี่แถวในตาราง ดังนั้นจึงไม่จำเป็นต้องใช้ดัชนี
--ไวยากรณ์
--สร้างดัชนี [ไม่ซ้ำกัน] [คลัสเตอร์|ไม่คลัสเตอร์] index_name บน table_name (column_name[,column_name]...)
-
-- ด้วย fillfactor = x --ปัจจัยการเติม x คือค่าระหว่าง 0 ถึง 100
-
รหัส
ใช้สตั๊ด
ไป
ถ้ามี (เลือก [ชื่อ] จาก sysindexes โดยที่ [ชื่อ]='IX_stuMarks_writeExam')
วางดัชนี stuMarks.IX_stuMarks_writeExam -- ตรวจสอบว่ามีดัชนีอยู่แล้วและลบออกหากมีอยู่
สร้างดัชนีที่ไม่คลัสเตอร์ IX_stuMarks_writeExam บน stuMarks (writeExam)
ด้วย fillfactor=30 --เติมพื้นที่ที่สงวนไว้
ไป
--แบบสอบถาม
เลือก * จาก stumarks (index=IX_stuMarks_writeExam)
--ข้อผิดพลาดจะถูกรายงาน: มีข้อผิดพลาดทางไวยากรณ์ใกล้กับ 'ดัชนี' หากจะเป็นส่วนหนึ่งของคำใบ้ตาราง จะต้องมีคำสำคัญและวงเล็บด้วย เช่น:
เลือก * จาก stumarks ด้วย (index=IX_stuMarks_writeExam)
เลือก * จาก stumarks ด้วย (index=IX_stuMarks_writeExam) โดยที่ writeExam ระหว่าง 60 ถึง 90
-------------------------------------------------- -------------------------------------------------- --------
--------------- * * * * ดู* * รูปภาพ* * * * ----------------
-------------------------------------------------- -------------------------------------------------- --------
มุมมอง: เป็นตารางเสมือน ซึ่งเป็นวิธีการสืบค้นตามข้อมูลของตารางเดียวหรือหลายตาราง
ฟังก์ชันทั่วไป: กรองแถวในตาราง ป้องกันผู้ใช้ที่ไม่ได้รับอนุญาตจากการเข้าถึงข้อมูลที่ละเอียดอ่อน สรุปตารางข้อมูลทางกายภาพหลายตารางให้เป็นตารางข้อมูลเชิงตรรกะเดียว
--ไวยากรณ์:
--สร้างมุมมอง view_name
--เช่น
--<เลือกคำสั่ง>
รหัส
ใช้สตั๊ด
ไป
ถ้ามี (เลือก * จาก sysobjects โดยที่ name='view_stuinfo_stumarks')
วางมุมมอง view_stuinfo_stumarks
ไป
สร้างมุมมอง view_stuinfo_stumarks
เช่น
เลือกชื่อ=stuname, หมายเลขนักเรียน=stuinfo.stuno, คะแนนสอบข้อเขียน=writeexam, คะแนนสอบคอมพิวเตอร์=labexam,
คะแนนเฉลี่ย = (writeexam+labexam)/2 จาก stuinfo เหลือเข้าร่วม stumarks บน stuinfo.stuno = stumarks.stuno
ไป