ใช้ WHERE ร่วมกับ UPDATE เพื่อจำกัดขอบเขตการอัปเดตเฉพาะช่วงที่ต้องการ
สร้างตารางตัวอย่าง
mysql> create table DemoTable (
Name varchar(40),
Position int );
Query OK, 0 rows affected (1.17 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into DemoTable values('Chris',90); Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('David',67); Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('Bob',55); Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Sam',40); Query OK, 1 row affected (0.15 sec)
แสดงข้อมูลก่อนอัปเดต
mysql> select *from DemoTable;
+-------+----------+ | Name | Position | +-------+----------+ | Chris | 90 | | David | 67 | | Bob | 55 | | Sam | 40 | +-------+----------+ 4 rows in set (0.00 sec)
คิวรี่อัปเดตเฉพาะ Position ที่อยู่ระหว่าง 50-90
mysql> update DemoTable
set Position=Position+10
where Position > 50 and Position < 90;
Query OK, 2 rows affected (0.11 sec)
Rows matched: 2 Changed: 2 Warnings: 0
ตรวจสอบผลลัพธ์หลังอัปเดต
mysql> select *from DemoTable;
+-------+----------+ | Name | Position | +-------+----------+ | Chris | 90 | | David | 77 | | Bob | 65 | | Sam | 40 | +-------+----------+ 4 rows in set (0.00 sec)
คำอธิบาย
- Chris (90) และ Sam (40) ไม่ถูกอัปเดต เพราะไม่อยู่ในเงื่อนไข
- David (67→77) และ Bob (55→65) ถูกเพิ่ม 10
Rows matched: 2 Changed: 2แสดงว่ามี 2 แถวตรงเงื่อนไขและเปลี่ยนค่า
แนวทางปฏิบัติที่ดี
- ทดสอบด้วย SELECT ก่อน:
SELECT * FROM DemoTable WHERE Position > 50 AND Position < 90; - ใช้ Transaction สำหรับการอัปเดตสำคัญ:
START TRANSACTION; ... COMMIT; - Backup ก่อนอัปเดตข้อมูลจริง
- พิจารณาใช้
BETWEEN:WHERE Position BETWEEN 51 AND 89
กรณีซับซ้อน: อัปเดตหลายเงื่อนไข
UPDATE DemoTable SET Position = CASE
WHEN Position < 50 THEN Position + 5
WHEN Position BETWEEN 50 AND 80 THEN Position + 10
WHEN Position > 80 THEN Position + 15
END;