บทนำ
MySQL รองรับ LIMIT ในคำสั่ง UPDATE เพื่อจำกัดจำนวนแถวที่จะอัปเดต ซึ่งมีประโยชน์เมื่อต้องการอัปเดตแค่บางส่วนของข้อมูล
ตัวอย่างการสร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name VARCHAR(20)
-> );
Query OK, 0 rows affected (0.69 sec)
mysql> INSERT INTO DemoTable(Name) VALUES('Carol');
mysql> INSERT INTO DemoTable(Name) VALUES('Chris');
mysql> INSERT INTO DemoTable(Name) VALUES('David');
mysql> INSERT INTO DemoTable(Name) VALUES('Bob');
mysql> INSERT INTO DemoTable(Name) VALUES('Mike');
mysql> INSERT INTO DemoTable(Name) VALUES('Sam');
mysql> INSERT INTO DemoTable(Name) VALUES('Robert');
mysql> INSERT INTO DemoTable(Name) VALUES('Adam');
แสดงข้อมูลก่อนอัปเดต
mysql> SELECT * FROM DemoTable;
ผลลัพธ์
+----+--------+
| Id | Name |
+----+--------+
| 1 | Carol |
| 2 | Chris |
| 3 | David |
| 4 | Bob |
| 5 | Mike |
| 6 | Sam |
| 7 | Robert |
| 8 | Adam |
+----+--------+
8 rows in set (0.00 sec)
คำสั่งอัปเดต 7 แถวแรก ให้ Name = 'John'
mysql> UPDATE DemoTable
-> SET Name = 'John'
-> LIMIT 7;
ผลลัพธ์หลังอัปเดต
mysql> SELECT * FROM DemoTable;
+----+------+
| Id | Name |
+----+------+
| 1 | John |
| 2 | John |
| 3 | John |
| 4 | John |
| 5 | John |
| 6 | John |
| 7 | John |
| 8 | Adam |
+----+------+
8 rows in set (0.00 sec)
คำอธิบาย
LIMIT 7จำกัดการอัปเดตเพียง 7 แถวแรก (ตามลำดับการจัดเก็บ/Primary Key)- แถวที่ 8 (Adam) ไม่ได้รับการอัปเดต
- ควรใช้ร่วมกับ
ORDER BYเพื่อควบคุมลำดับแถวที่จะอัปเดต (MySQL รองรับ ORDER BY ใน UPDATE)
ตัวอย่างพร้อม ORDER BY
-- อัปเดต 3 แถวที่มี Id มากที่สุด
UPDATE DemoTable
SET Name = 'Updated'
ORDER BY Id DESC
LIMIT 3;
ข้อควรระวัง
- LIMIT ใน UPDATE เป็นฟีเจอร์เฉพาะ MySQL (Non-standard SQL)
- ไม่ควรใช้ใน Production โดยไม่มี ORDER BY ชัดเจน
- อาจทำให้เกิด Inconsistency ใน Replication