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

อัปเดตค่าเฉพาะแถวและคอลัมน์ที่กำหนดใน MySQL


สถานการณ์

ต้องการเปลี่ยนค่า 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';