สร้างตารางและข้อมูลตัวอย่าง
mysql> create table DemoTable1968 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20) );
mysql> insert into DemoTable1968(Name) values('Chris');
mysql> insert into DemoTable1968(Name) values('David');
mysql> insert into DemoTable1968(Name) values('Sam');
mysql> insert into DemoTable1968(Name) values('Mike');
mysql> insert into DemoTable1968(Name) values('Carol');
ข้อมูลก่อนอัปเดต
+----+-------+ | Id | Name | +----+-------+ | 1 | Chris | | 2 | David | | 3 | Sam | | 4 | Mike | | 5 | Carol | +----+-------+
Query อัปเดต 3 แถวแรก
ใช้ ORDER BY Id LIMIT 3 ในคำสั่ง UPDATE:
mysql> update DemoTable1968 set Name='Robert' order by Id limit 3; Query OK, 3 rows affected (0.00 sec) Rows matched: 3 Changed: 3 Warnings: 0
ข้อมูลหลังอัปเดต
+----+--------+ | Id | Name | +----+--------+ | 1 | Robert | | 2 | Robert | | 3 | Robert | | 4 | Mike | | 5 | Carol | +----+--------+
ข้อสังเกตสำคัญ
ORDER BYใน UPDATE กำหนดลำดับแถวที่จะอัปเดต (โดยปกติ UPDATE ไม่มี ORDER BY แต่ MySQL รองรับ)LIMIT 3จำกัดจำนวนแถวที่อัปเดต- หากไม่มี ORDER BY ลำดับอาจไม่แน่นอน (ขึ้นกับ Storage Engine)
- รองรับได้ใน MySQL และ MariaDB แต่ ไม่ใช่ SQL Standard (PostgreSQL, SQL Server ใช้วิธีอื่น)
วิธีมาตรฐาน (ทำงานได้ทุก Database)
UPDATE DemoTable1968 SET Name='Robert' WHERE Id IN (SELECT Id FROM DemoTable1968 ORDER BY Id LIMIT 3);
หมายเหตุ: MySQL ไม่อนุญาตให้ UPDATE ตารางเดียวกับที่ใช้ใน Subquery ต้องใช้ Workaround
Workaround สำหรับ MySQL
UPDATE DemoTable1968 SET Name='Robert' WHERE Id IN (SELECT Id FROM (SELECT Id FROM DemoTable1968 ORDER BY Id LIMIT 3) AS tmp);