Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ใช้ UPDATE กับ LIMIT ใน MySQL ได้หรือไม่

ได้** MySQL รองรับ UPDATE ... LIMIT โดยตรง ตั้งแต่ Version เก่าๆ แล้ว

Syntax แบบตรงไปตรงมา (MySQL Native)

UPDATE table_name
SET column = value
WHERE condition
LIMIT row_count;

ตัวอย่างง่าย

UPDATE tblUpdateLimit
SET name = 'Adam'
WHERE id > 0
LIMIT 7;

ตัวอย่างในบทความ (ใช้ Subquery สำหรับ ORDER BY)

MySQL ไม่รองรับ ORDER BY ใน UPDATE โดยตรง (ก่อน 8.0.20) ต้องใช้ Subquery

UPDATE tblUpdateLimit
SET name = 'Adam'
WHERE id IN (
    SELECT id FROM (
        SELECT id FROM tblUpdateLimit
        ORDER BY id ASC
        LIMIT 0, 7
    ) AS t
);

ผลลัพธ์

+------+--------+
| id   | name   |
+------+--------+
| 1    | Adam   |
| 2    | Adam   |
| 3    | Adam   |
| 4    | Adam   |
| 5    | Adam   |
| 6    | Adam   |
| 7    | Adam   |
| 8    | Serhat |
| 9    | Winny  |
+------+--------+

MySQL 8.0.20+ รองรับ ORDER BY ใน UPDATE

UPDATE tblUpdateLimit
SET name = 'Adam'
WHERE id > 0
ORDER BY id ASC
LIMIT 7;

ข้อควรระวัง

  • ไม่มี ORDER BY: แถวที่ถูก UPDATE อาจไม่คาดคิด (ขึ้นกับ Storage Engine)
  • Replication: LIMIT ใน UPDATE อาจทำให้ Master-Slave ไม่ Consistent (ใช้ Row-based Replication)
  • Transaction: ควร wrap ใน Transaction ถ้าต้องการ Atomicity

สรุป

  • ✅ ใช้ UPDATE ... LIMIT n ได้โดยตรง
  • ✅ MySQL 8.0.20+ ใช้ ORDER BY ... LIMIT ได้
  • ⚠️ Version เก่า ต้องใช้ Subquery สำหรับ ORDER BY
  • ⚠️ ระวัง Replication และ Non-deterministic Update