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

การอัปเดตเฉพาะช่วงข้อมูลใน MySQL โดยไม่กระทบคอลัมน์ทั้งหมด

ใช้ 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;