สถานการณ์
ต้องการเปลี่ยนค่า StudentId ของแถวที่ StudentName = 'Carol Taylor' จาก 'David_321' เป็น 'Carol_321'
วิธีแก้: ใช้ UPDATE ... WHERE
ระบุเงื่อนไขใน WHERE Clause เพื่อระบุแถวเป้าหมาย และ SET คอลัมน์ที่ต้องการเปลี่ยน
ตัวอย่างการใช้งาน
1. สร้างตาราง
mysql> CREATE TABLE DemoTable1569 (
-> StudentId VARCHAR(10),
-> StudentName VARCHAR(20)
-> );
Query OK, 0 rows affected (3.05 sec)
2. เพิ่มข้อมูล
mysql> INSERT INTO DemoTable1569 VALUES('John_12', 'John Smith');
Query OK, 1 row affected (0.38 sec)
mysql> INSERT INTO DemoTable1569 VALUES('David_321', 'Carol Taylor');
Query OK, 1 row affected (0.50 sec)
mysql> INSERT INTO DemoTable1569 VALUES('David_989', 'David Miller');
Query OK, 1 row affected (0.24 sec)
3. แสดงข้อมูลก่อนอัปเดต
mysql> SELECT * FROM DemoTable1569;
ผลลัพธ์:
+-----------+--------------+ | StudentId | StudentName | +-----------+--------------+ | John_12 | John Smith | | David_321 | Carol Taylor | | David_989 | David Miller | +-----------+--------------+ 3 rows in set (0.00 sec)
4. อัปเดต StudentId ของ Carol Taylor
mysql> UPDATE DemoTable1569
-> SET StudentId = 'Carol_321'
-> WHERE StudentName = 'Carol Taylor';
Query OK, 1 row affected (0.26 sec)
Rows matched: 1 Changed: 1 Warnings: 0
5. ตรวจสอบหลังอัปเดต
mysql> SELECT * FROM DemoTable1569;
ผลลัพธ์:
+-----------+--------------+ | StudentId | StudentName | +-----------+--------------+ | John_12 | John Smith | | Carol_321 | Carol Taylor | | David_989 | David Miller | +-----------+--------------+ 3 rows in set (0.00 sec)
Best Practices สำหรับ UPDATE
1. ตรวจสอบด้วย SELECT ก่อน
SELECT * FROM DemoTable1569 WHERE StudentName = 'Carol Taylor';
2. ใช้ Primary Key ใน WHERE (เร็วและปลอดภัยที่สุด)
UPDATE DemoTable1569 SET StudentId = 'Carol_321' WHERE Id = 2;
3. ใช้ LIMIT ป้องกันอัปเดตผิดหลายแถว
UPDATE DemoTable1569 SET StudentId = 'Carol_321' WHERE StudentName = 'Carol Taylor' LIMIT 1;
4. ใช้ Transaction (สำคัญ!)
START TRANSACTION; UPDATE DemoTable1569 SET StudentId = 'Carol_321' WHERE StudentName = 'Carol Taylor'; -- ตรวจสอบผลลัพธ์ SELECT * FROM DemoTable1569 WHERE StudentName = 'Carol Taylor'; -- ถ้าถูกต้อง COMMIT; -- ถ้าผิด ROLLBACK;
ข้อควรระวัง
- ไม่มี WHERE = อัปเดตทุกแถวในตาราง!
- WHERE บน Non-unique Column อาจ Match หลายแถว → ใช้ LIMIT 1 หรือ PK
- MySQL Safe Update Mode (default ON ในบาง Client) ต้องการ WHERE ใช้ Key หรือ LIMIT
- Gunakan
Rows matched: 1 Changed: 1ยืนยันจำนวนแถวที่ได้รับผลกระทบ
Multi-table UPDATE (MySQL Extension)
UPDATE Table1 t1 JOIN Table2 t2 ON t1.Id = t2.RefId SET t1.Status = 'Processed', t2.ProcessedAt = NOW() WHERE t1.Status = 'Pending';