แบบสอบถาม SELECT ภายในธุรกรรมในตัวเองไม่ได้ป้องกันอย่างถูกต้องจากการปรับปรุงและลบ
สิ่งที่คุณต้องใช้ดังต่อไปนี้:
หากคุณออกDelete From orders Where id=1
มันจะเกิดขึ้นเมื่อแถวในorders
ตารางปลดล็อคของพวกเขาเมื่อสิ้นสุดการทำธุรกรรม คุณสามารถทดลอง (บนเซิร์ฟเวอร์ Dev / Staging ได้โปรด) ด้วยการใช้READ UNCOMMITTED
ระดับการแยกธุรกรรมเพื่อทำให้การลบเกิดขึ้นอย่างมีเหตุผล แต่จะส่งผลให้มองเห็นและบันทึกอย่างถาวร
ในการทำธุรกรรมครั้งที่สองโดยทั่วไปการเดิมพันทั้งหมดจะปิด ถ้าคุณวิ่ง
select * From orders Where id=1;
UPDATE orders SET username="John" Where id=1;
วิ่งDelete From orders Where id=1
จะกระทำทันที คุณจะเห็นแถวลบ (หรือไม่เห็น) ทั้งนี้ขึ้นอยู่กับคำสั่งที่ MySQL เรียกใช้งานคำสั่งเหล่านี้
ข้อแม้
MySQL 5.6 มีดังต่อไปนี้ :
START TRANSACTION READ WRITE;
START TRANSACTION READ ONLY;
ตัวอ่าน READ WRITE และ READ ONLY เท่านั้นที่ตั้งค่าโหมดการเข้าถึงธุรกรรม พวกเขาอนุญาตหรือห้ามการเปลี่ยนแปลงตารางที่ใช้ในการทำธุรกรรม ข้อ จำกัด ของ READ ONLY ป้องกันการทำธุรกรรมจากการปรับเปลี่ยนหรือล็อคตารางธุรกรรมและธุรกรรมที่ไม่ใช่ธุรกรรมที่มองเห็นได้ในธุรกรรมอื่น ๆ การทำธุรกรรมยังคงสามารถแก้ไขหรือล็อคตารางชั่วคราว ตัวดัดแปลงเหล่านี้มีให้ใน MySQL 5.6.5