ในระบบ SQL Server Lock Mode คือตัวบอก “สิทธิ์” ในการเข้าถึงทรัพยากรนั้น ๆ ว่าคนที่ถือ Lock อยู่กำลังทำอะไร และยอมให้คนอื่นเข้ามาทำอะไรได้บ้าง
โหมดพื้นฐาน
- S : * ความหมาย: ใช้สำหรับการ “อ่าน”
- พฤติกรรม: ยอมให้คนอื่นเข้ามาอ่าน พร้อมกันได้หลายคน แต่ ห้าม ใครเข้ามาแก้ไข จนกว่าจะอ่านเสร็จ
- X
- ความหมาย: ใช้สำหรับการ “เขียน/แก้ไข”
- พฤติกรรม: เป็นโหมดเผด็จการ ห้ามคนอื่นเข้ามายุ่งเด็ดขาด ไม่ว่าจะอ่านหรือเขียน เพื่อป้องกันข้อมูลเพี้ยน
- U
- ความหมาย: โหมดเตรียมตัวแก้ไข
- พฤติกรรม: ใช้ตอนที่ SQL กำลังค้นหาแถวเพื่อจะ Update โดย U จะยอมให้คนอื่นอ่านได้ แต่ห้ามคนอื่นมาจอง U หรือ X ซ้อน
โหมดแสดงเจตจำนง
โหมดเหล่านี้มักจะขึ้นที่ระดับ OBJECT เพื่อบอกว่า “ข้างในตารางนี้ มีบางแถวโดน Lock อยู่นะ”
- IS : บอกว่า “ข้างในตารางนี้ มีบางแถวที่ฉันกำลังอ่านอยู่ “
- IX : บอกว่า “ข้างในตารางนี้ มีบางแถวที่ฉันกำลังแก้ไขอยู่ “
- SIX : บอกว่า “ฉันกำลังอ่านทั้งตารางนี้อยู่ และกำลังจะแก้ไขบางแถวในนี้ด้วย”
สรุปตารางความเข้ากันได้
ถ้า Mode ชนกันจะเกิดสถานะ WAIT
| Mode ที่ถืออยู่ | ขอ S (อ่าน) | ขอ X (เขียน) | ผลลัพธ์ |
| S (อ่านอยู่) | ✅ ได้ | ❌ ติด WAIT | อ่านพร้อมกันได้ แต่แก้ไม่ได้ |
| X (เขียนอยู่) | ❌ ติด WAIT | ❌ ติด WAIT | คนอื่นทำอะไรไม่ได้เลย ต้องรอ |
| IX (จองแก้บางแถว) | ❌ ติด WAIT* | ✅ ได้* | *ถ้าแก้คนละแถวทำได้ แต่ถ้าจะอ่านทั้งตารางต้องรอ |
ความหมายของ Lock Mode ในผลลัพธ์ SQL
| LockMode | ชื่อเต็ม | ความหมายและสิ่งที่เกิดขึ้น |
| S | Shared | ใช้ตอนอ่านข้อมูล : อนุญาตให้คนอื่นอ่านแถว / ตารางนี้พร้อมกันได้ แต่ห้ามใครมาแก้ไขจนกว่าจะอ่านจบ |
| X | Exclusive | ใช้ตอนเขียนข้อมูล : ห้ามคนอื่นเข้ามายุ่งเด็ดขาด ไม่ว่าจะอ่านหรือแก้ เพื่อป้องกันข้อมูลพัง |
| U | Update | โหมดกึ่งกลาง: ใช้ตอนกำลังค้นหาข้อมูลเพื่อจะ Update เพื่อป้องกันไม่ให้คนอื่นเข้ามาจองแก้ในเวลาเดียวกัน |
| IS | Intent Shared | บอกในระดับบน ว่า “ฉันกำลังถือ Lock แบบ S อยู่ที่ระดับล่าง นะ” |
| IX | Intent Exclusive | บอกในระดับบน ว่า “ฉันกำลังถือ Lock แบบ X อยู่ที่ระดับล่าง นะ” |
| SIX | Shared Intent Exclusive | “ฉันกำลังอ่านข้อมูลทั้งตาราง และมีแผนจะแก้ไขบางแถว ในตารางนี้ด้วย” |
| Sch-M | Schema Modification | ใช้ตอนแก้โครงสร้าง: เช่น ALTER TABLE หรือ DROP TABLE ห้ามใครเข้าใกล้ตารางนี้เด็ดขาดแม้แต่จะอ่าน |
| Sch-S | Schema Stability | ใช้ตอน Compile Query: เพื่อล็อกโครงสร้างตารางไว้ไม่ให้ใครมาแก้ตอนที่ Query กำลังทำงาน |
อ่านเพิ่มเติม