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

MySQL: ตั้งค่าเฉพาะ 3 แถวแรกของคอลัมน์ด้วย LIMIT 3

สร้างตารางและข้อมูลตัวอย่าง

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);