2
วิธีการใช้ล็อคในแง่ดีอย่างถูกต้องใน MySQL
หนึ่งจะใช้ล็อคในแง่ดีอย่างถูกต้องใน MySQL ได้อย่างไร ทีมของเราได้อนุมานว่าเราต้องทำ # 4 ด้านล่างมิฉะนั้นอาจมีความเสี่ยงที่เธรดอื่นสามารถอัปเดตบันทึกรุ่นเดียวกัน แต่เราต้องการตรวจสอบว่านี่เป็นวิธีที่ดีที่สุด สร้างเขตข้อมูลเวอร์ชันบนตารางที่คุณต้องการใช้การล็อคในแง่ดีสำหรับคอลัมน์ชื่อ = "รุ่น" เมื่อเลือกตรวจสอบให้แน่ใจว่าได้รวมคอลัมน์รุ่นแล้วจดบันทึกเวอร์ชัน ในการอัปเดตครั้งต่อ ๆ ไปคำสั่งการอัปเดตควรออก "โดยที่ version = X" โดยที่ X คือรุ่นที่เราได้รับใน # 2 และตั้งค่าฟิลด์เวอร์ชันระหว่างคำสั่งการอัปเดตนั้นเป็น X + 1 ดำเนินการSELECT FOR UPDATEเกี่ยวกับบันทึกที่เรากำลังจะอัปเดตเพื่อให้เราเป็นอันดับที่สามารถเปลี่ยนแปลงบันทึกที่เรากำลังพยายามที่จะปรับปรุง เพื่อชี้แจงเราพยายามป้องกันสองเธรดที่เลือกเร็กคอร์ดเดียวกันในหน้าต่างเวลาเดียวกันที่พวกเขาคว้าเร็กคอร์ดเวอร์ชันเดียวกันจากการเขียนทับกันถ้าพวกเขาพยายามและอัพเดตเร็กคอร์ดในเวลาเดียวกัน เราเชื่อว่าหากเราไม่ทำ # 4 มีโอกาสที่ถ้าทั้งสองเธรดป้อนธุรกรรมของตนในเวลาเดียวกัน (แต่ยังไม่ได้ออกการอัปเดต) เมื่อพวกเขาไปอัปเดตเธรดที่สองที่จะใช้ UPDATE ... โดยที่ version = X จะทำงานกับข้อมูลเก่า เราคิดถูกต้องหรือไม่ว่าเราต้องทำการล็อกในแง่ร้ายเมื่อทำการอัพเดตแม้ว่าเราจะใช้ฟิลด์เวอร์ชั่น / การล็อคในแง่ดี