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

อัปเดตคอลัมน์ด้วยค่าเดียวกันบางส่วนด้วย UPDATE SET LIMIT ใน MySQL

บทนำ

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