ได้** 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