1. บทนำ
MySQL ถูกใช้ในแอปพลิเคชันเว็บและการจัดการฐานข้อมูลหลายประเภท และการอัปเดตข้อมูลเป็นสิ่งสำคัญอย่างยิ่งสำหรับการดำเนินงานประจำวันและการบำรุงรักษาแอปพลิเคชัน โดยเฉพาะอย่างยิ่งสำหรับระบบที่ต้องจัดการปริมาณข้อมูลจำนวนมากหรือเมื่อจำเป็นต้องอัปเดตหลายแถวพร้อมกัน การใช้คำสั่ง UPDATE ของ MySQL เพื่อทำงานอย่างมีประสิทธิภาพจึงเป็นสิ่งที่ต้องทำ
บทความนี้อธิบายอย่างละเอียดว่า จะอัปเดตหลายแถวและหลายคอลัมน์พร้อมกันโดยใช้คำสั่ง UPDATE ของ MySQL ตั้งแต่การใช้งานพื้นฐานจนถึงการอัปเดตแบบมีเงื่อนไขที่ซับซ้อน เราจะนำเสนอขั้นตอนอย่างเป็นลำดับ ทำให้เป็นแหล่งข้อมูลที่มีประโยชน์สำหรับผู้ที่ต้องการทำการอัปเดตที่ซับซ้อนด้วย MySQL
2. ไวยากรณ์พื้นฐานของคำสั่ง UPDATE
คำสั่ง UPDATE ของ MySQL เป็นไวยากรณ์สำหรับอัปเดตข้อมูลในตารางตามเงื่อนไขที่กำหนด ก่อนอื่นเรามาดูไวยากรณ์พื้นฐานของคำสั่ง UPDATE และวิธีอัปเดตแถวหรือคอลัมน์เดียว
ไวยากรณ์พื้นฐาน
ไวยากรณ์พื้นฐานของคำสั่ง UPDATE ของ MySQL มีดังนี้
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
- table_name : ระบุชื่อของตารางที่ต้องการอัปเดต
- SET clause : ระบุคอลัมน์ที่ต้องการอัปเดตและค่าที่จะตั้งใหม่ เมื่ออัปเดตหลายคอลัมน์พร้อมกัน ให้คั่นคู่ค่า‑คอลัมน์ด้วยเครื่องหมายคอมม่า
- WHERE clause : ระบุเงื่อนไขสำหรับแถวที่ต้องการอัปเดต หากละเว้นเงื่อนไข ตารางทั้งหมดจะถูกอัปเดต จึงต้องระมัดระวัง
ตัวอย่างการอัปเดตแถวหรือคอลัมน์เดียว
เป็นตัวอย่างการใช้งานพื้นฐาน เรามาดูวิธีอัปเดตแถวหรือคอลัมน์เดียวกัน
UPDATE users
SET name = 'Tanaka'
WHERE id = 1;
คำสั่ง SQL นี้อัปเดตคอลัมน์ name ของแถวที่มี id เท่ากับ 1 ในตาราง users ให้เป็น “Tanaka” โดยการระบุ WHERE clause ทำให้สามารถอัปเดตเฉพาะแถวที่ต้องการเท่านั้น

3. การอัปเดตหลายแถวพร้อมกันเป็นกลุ่ม
เมื่ออัปเดตหลายแถวเป็นกลุ่ม คุณสามารถระบุเงื่อนไขหลายอย่างใน WHERE clause ได้ ตัวอย่างเช่น การใช้ IN หรือ OR เพื่อกำหนดหลายเงื่อนไขและอัปเดตหลายแถวอย่างมีประสิทธิภาพ
การอัปเดตหลายแถวโดยใช้ IN Clause
การใช้ IN clause ช่วยให้คุณอัปเดตแถวที่ตรงกับรายการค่าที่กำหนดไว้
UPDATE users
SET status = 'active'
WHERE id IN (1, 3, 5, 7);
ในคำสั่ง SQL นี้ ภายในตาราง users แถวที่ id เป็น 1, 3, 5 หรือ 7 จะมีคอลัมน์ status ถูกอัปเดตเป็น ‘active’ การใช้ IN clause ทำให้คุณสามารถอัปเดตหลายแถวที่ตรงกับเงื่อนไขได้พร้อมกัน
การระบุหลายเงื่อนไขโดยใช้ OR Clause
OR clause ช่วยให้คุณรวมและระบุหลายเงื่อนไขพร้อมกัน
UPDATE users
SET status = 'inactive'
WHERE id = 2 OR id = 4 OR id = 6;
ในคำสั่ง SQL นี้ แถวที่ id เป็น 2, 4 หรือ 6 จะมีคอลัมน์ status ถูกอัปเดตเป็น ‘inactive’ การใช้ OR clause ทำให้คุณสามารถอัปเดตแถวที่ตรงกับหลายเงื่อนไขได้ในครั้งเดียว
4. การอัปเดตหลายคอลัมน์พร้อมกัน
ในคำสั่ง UPDATE ของ MySQL คุณสามารถอัปเดตหลายคอลัมน์พร้อมกันได้ ซึ่งเป็นประโยชน์เมื่อคุณต้องการเปลี่ยนข้อมูลหลายส่วนพร้อมกันโดยยังคงความสอดคล้องของข้อมูล
ตัวอย่างการอัปเดตหลายคอลัมน์
เมื่ออัปเดตหลายคอลัมน์พร้อมกัน ให้ระบุชื่อคอลัมน์และค่าที่ต้องการใน SET clause โดยคั่นด้วยคอมม่า
UPDATE products
SET price = price * 1.1, stock = stock - 1
WHERE id = 10;
ในคำสั่ง SQL นี้ สำหรับแถวในตาราง products ที่ id เท่ากับ 10 คอลัมน์ price จะเพิ่มขึ้น 10% และคอลัมน์ stock จะลดลง 1 หน่วย การระบุหลายคอลัมน์ใน SET clause ทำให้คุณสามารถอัปเดตข้อมูลหลายส่วนได้อย่างมีประสิทธิภาพ
5. การอัปเดตแบบมีเงื่อนไขโดยใช้ CASE Statements
ในคำสั่ง UPDATE ของ MySQL คุณสามารถใช้ CASE expression เพื่อกำหนดค่าต่าง ๆ ตามเงื่อนไขได้ ซึ่งช่วยให้คุณปรับเปลี่ยนเนื้อหาการอัปเดตอย่างยืดหยุ่นตามหลายเงื่อนไข ทำให้การทำงานอัปเดตที่ซับซ้อนง่ายขึ้น
ไวยากรณ์พื้นฐานโดยใช้ CASE Expressions
The basic syntax for an UPDATE statement using a CASE expression is as follows.
UPDATE table_name
SET column_name = CASE
WHEN condition1 THEN value1
WHEN condition2 THEN value2
...
ELSE default_value
END
WHERE condition;
- Column name : ระบุคอลัมน์ที่คุณต้องการอัปเดต.
- Condition : ระบุเงื่อนไขในคลอส WHEN และกำหนดค่าที่จะใช้ในคลอส THEN เมื่อเงื่อนไขตรงกัน.
- Default value : ค่าที่ตั้งไว้เมื่อไม่มีเงื่อนไขใดตรงกัน (ไม่บังคับ).
ตัวอย่างการใช้งานจริงด้วย CASE
ต่อไปนี้เป็นตัวอย่างที่อัปเดตเงินเดือนในตาราง employees ตามตำแหน่งงาน.
UPDATE employees
SET salary = CASE
WHEN position = 'Manager' THEN salary * 1.1
WHEN position = 'Developer' THEN salary * 1.05
WHEN position = 'Intern' THEN salary * 1.02
ELSE salary
END;
ในคำสั่ง SQL นี้ สำหรับแต่ละแถวในตาราง employees คอลัมน์ salary จะถูกอัปเดตตามค่าของคอลัมน์ position.
การอัปเดตแบบมีเงื่อนไขของหลายคอลัมน์
CASE expression สามารถใช้กับหลายคอลัมน์ได้เช่นกัน ในตัวอย่างด้านล่าง คอลัมน์ salary และ bonus ในตาราง employees จะถูกอัปเดตด้วยค่าที่แตกต่างกันตามตำแหน่งงานและจำนวนปีที่ทำงาน.
UPDATE employees
SET
salary = CASE
WHEN position = 'Manager' AND years_of_service >= 5 THEN salary * 1.15
WHEN position = 'Developer' AND years_of_service >= 3 THEN salary * 1.1
ELSE salary
END,
bonus = CASE
WHEN position = 'Manager' THEN bonus + 1000
WHEN position = 'Developer' THEN bonus + 500
ELSE bonus
END;
ในคำสั่ง SQL นี้ เงินเดือนและโบนัสจะถูกอัปเดตแบบมีเงื่อนไขพร้อมกันตามตำแหน่งงานและจำนวนปีที่ทำงาน การใช้ CASE expression ทำให้การอัปเดตมีความยืดหยุ่นตามหลายเงื่อนไข. 
6. การอัปเดตหลายตารางโดยใช้ JOIN
ใน MySQL คุณสามารถใช้คลอส JOIN เพื่อรวมหลายตารางและอัปเดตแถวตามเงื่อนไขที่กำหนดได้ ซึ่งทำให้คุณอ้างอิงข้อมูลจากตารางต่าง ๆ ขณะอัปเดตตารางหนึ่ง ช่วยให้ทำการจัดการข้อมูลที่ซับซ้อนได้.
ไวยากรณ์พื้นฐานสำหรับคำสั่ง UPDATE ที่ใช้ JOIN
เมื่ออัปเดตหลายตารางด้วย JOIN ไวยากรณ์พื้นฐานมีดังนี้.
UPDATE tableA
JOIN tableB ON tableA.column = tableB.column
SET tableA.updated_column = new_value
WHERE condition;
- Table A and Table B : ระบุตารางเป้าหมายสำหรับการอัปเดต (Table A) และตารางอ้างอิง (Table B).
- ON clause : ระบุเงื่อนไข JOIN และกำหนดคอลัมน์ที่ใช้เชื่อมตาราง.
- SET clause : ระบุคอลัมน์ที่ต้องการอัปเดตและค่าที่ใหม่.
- WHERE clause : ระบุเงื่อนไขการอัปเดต เพื่ออัปเดตเฉพาะแถวที่ตรงกัน.
ตัวอย่างการใช้งานจริงด้วย JOIN
ตัวอย่างเช่น เรามาดูตัวอย่างที่ทำการ JOIN ตาราง orders กับตาราง customers เพื่ออัปเดตสถานะของออร์เดอร์ที่เกี่ยวข้องกับลูกค้ารายหนึ่ง.
UPDATE orders
JOIN customers ON orders.customer_id = customers.id
SET orders.status = 'Shipped'
WHERE customers.vip_status = 'Yes';
ในคำสั่ง SQL นี้ คอลัมน์ status ของแถวในตาราง orders ที่เกี่ยวข้องกับลูกค้าที่ vip_status ในตาราง customers มีค่า “Yes” จะถูกอัปเดตเป็น “Shipped”. การใช้คลอส JOIN ทำให้คุณอัปเดตโดยอ้างอิงข้อมูลจากตารางอื่นได้.
การอัปเดตด้วย JOIN พร้อมหลายเงื่อนไข
คุณสามารถรวมหลายเงื่อนไขเพื่อระบุเกณฑ์ที่ละเอียดขึ้น ในตัวอย่างด้านล่าง สถานะของออร์เดอร์ที่เกี่ยวข้องกับลูกค้ารายหนึ่งจะถูกเปลี่ยนเป็นกลุ่มตามเงื่อนไข.
UPDATE orders
JOIN customers ON orders.customer_id = customers.id
SET orders.status = CASE
WHEN customers.vip_status = 'Yes' THEN 'Priority'
WHEN customers.vip_status = 'No' AND orders.amount > 10000 THEN 'Review'
ELSE orders.status
END
WHERE orders.date >= '2024-01-01';
โดยใช้ประโยชน์จาก JOIN คุณสามารถทำการอัปเดตข้อมูลอย่างยืดหยุ่นตามเงื่อนไขที่กำหนด.
7. ประสิทธิภาพและข้อควรพิจารณา
เมื่อใช้คำสั่ง MySQL UPDATE เพื่อแก้ไขหลายแถวหรือหลายคอลัมน์พร้อมกัน โดยเฉพาะกับชุดข้อมูลขนาดใหญ่ ต้องคำนึงถึงประสิทธิภาพ ด้านล่างนี้เป็นประเด็นสำคัญและข้อควรระวังที่คุณควรทราบเพื่อปรับปรุงประสิทธิภาพการอัปเดตและรักษาความสมบูรณ์ของข้อมูล
เคล็ดลับการเพิ่มประสิทธิภาพ
การใช้ดัชนี (Indexes)
เมื่ออัปเดตบันทึกโดยอาศัยเงื่อนไขเฉพาะในคำสั่ง WHERE การเพิ่มดัชนีให้กับคอลัมน์ที่เกี่ยวข้องจะช่วยเพิ่มความเร็วในการค้นหา ดัชนีช่วยให้การสืบค้นทำงานได้เร็วขึ้น แม้การอัปเดตจะต้องจัดการกับข้อมูลจำนวนมาก
CREATE INDEX idx_customer_id ON orders(customer_id);
อย่างไรก็ตาม การมีดัชนีมากเกินไปอาจทำให้ประสิทธิภาพลดลงได้ ดังนั้นจึงแนะนำให้สร้างดัชนีเฉพาะคอลัมน์ที่จำเป็นเท่านั้น
ลดภาระด้วยการประมวลผลเป็นชุด (Batch Processing)
การอัปเดตแถวจำนวนมากในครั้งเดียวอาจทำให้เซิร์ฟเวอร์ฐานข้อมูลทำงานหนักและทำให้เวลาตอบสนองช้าลง สำหรับการอัปเดตขนาดใหญ่ การใช้การประมวลผลเป็นชุด (ทำงานหลายรอบ) สามารถลดภาระบนเซิร์ฟเวอร์ได้
UPDATE orders
SET status = 'Processed'
WHERE status = 'Pending'
LIMIT 1000;
โดยการผสานกับสคริปต์ คุณสามารถรันการอัปเดตเป็นชุดซ้ำ ๆ เพื่อให้การแก้ไขข้อมูลทำได้อย่างมีประสิทธิภาพ
การใช้ Transaction
เมื่อมีหลายคำสั่ง UPDATE ที่เกี่ยวข้องกันหรือความสมบูรณ์ของข้อมูลเป็นสิ่งสำคัญ การใช้ transaction จะช่วยให้ข้อมูลคงที่ หากเกิดข้อผิดพลาดระหว่างการอัปเดต transaction จะทำการ rollback ทั้งหมดคืนสู่สภาพก่อนหน้า
START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE id = 1;
UPDATE accounts SET balance = balance + 500 WHERE id = 2;
COMMIT;
การจัดการล็อก (Lock Management)
การดำเนินการ UPDATE สามารถทำให้เกิดการล็อกตารางได้ ซึ่งสำคัญอย่างยิ่งเมื่อผู้ใช้หลายคนเข้าถึงตารางเดียวกันพร้อมกัน ตัวอย่างเช่น การใช้ล็อกระดับแถว (row‑level locks) จะทำให้ผู้ใช้คนอื่นสามารถทำงานกับแถวอื่นได้พร้อมกัน ส่งเสริมการประมวลผลแบบขนาน การหลีกเลี่ยงการล็อกเต็มตารางจะช่วยให้ฐานข้อมูลตอบสนองได้เร็วขึ้น 
8. สรุป
ในบทความนี้ เราได้อธิบายวิธีการอย่างละเอียดสำหรับการอัปเดตหลายบันทึกและหลายคอลัมน์โดยใช้คำสั่ง UPDATE ของ MySQL ครอบคลุมตั้งแต่การใช้งานพื้นฐานจนถึงเทคนิคขั้นสูง เมื่ออัปเดตข้อมูลหลายรายการใน MySQL คุณต้องพิจารณาปริมาณข้อมูล ความเร็วในการประมวลผล และความสมบูรณ์ของข้อมูล
สรุปประเด็นสำคัญ
- พื้นฐานของคำสั่ง UPDATE
- การเข้าใจไวยากรณ์พื้นฐานของคำสั่ง UPDATE ช่วยให้คุณอัปเดตคอลัมน์หรือบันทึกแต่ละรายการได้อย่างปลอดภัย
- การอัปเดตหลายบันทึกเป็นชุด (Bulk Updating Multiple Records)
- เราได้แสดงวิธีอัปเดตหลายบันทึกที่ตรงตามเงื่อนไขเฉพาะโดยใช้ WHERE, IN และ OR อย่างมีประสิทธิภาพ
- การอัปเดตหลายคอลัมน์พร้อมกัน (Simultaneous Updating of Multiple Columns)
- ด้วยการใช้ SET คุณสามารถอัปเดตหลายคอลัมน์ในบันทึกเดียวกันได้ในครั้งเดียว ทำให้การอัปเดตทำได้เร็วและคงความสอดคล้องของข้อมูล
- การอัปเดตตามเงื่อนไขด้วย CASE (Conditional Updates Using CASE Statements)
- การใช้ CASE ช่วยให้คุณทำการอัปเดตที่แตกต่างกันในหนึ่งคำสั่งเดียวตามเงื่อนไขต่าง ๆ ทำให้ตรรกะการอัปเดตซับซ้อนง่ายขึ้น
- การอัปเดตหลายตารางด้วย JOIN (Updating Multiple Tables Using JOIN)
- การอ้างอิงข้อมูลจากตารางอื่นขณะอัปเดตบันทึกเฉพาะช่วยเพิ่มความสมบูรณ์โดยรวมของฐานข้อมูล
- ประสิทธิภาพและข้อควรพิจารณา (Performance and Considerations)
- เราได้เรียนรู้วิธีอัปเดตข้อมูลอย่างมีประสิทธิภาพและปลอดภัยโดยใช้ดัชนี, การประมวลผลเป็นชุด, และ transaction รวมถึงการจัดการล็อกเพื่อเพิ่มประสิทธิภาพของฐานข้อมูล
สรุปผล
การอัปเดตข้อมูลใน MySQL อย่างมีประสิทธิภาพเป็นทักษะที่สำคัญอย่างยิ่งสำหรับการดูแลฐานข้อมูล การเชี่ยวชาญคำสั่ง UPDATE สามารถเพิ่มประสิทธิภาพการทำงานและทำให้ระบบโดยรวมทำงานได้ดีขึ้น อย่าลืมนำเทคนิคที่นำเสนอในบทความนี้ไปใช้ในงานและโครงการจริงของคุณ.


