ใช้ UPDATE โดยไม่มี WHERE เพื่อตั้งค่าคอลัมน์เดียวกันทุกแถว
ไวยากรณ์
UPDATE yourTableName SET yourColumnName = yourValue;
สร้างตารางตัวอย่าง
mysql> CREATE TABLE setAllValuesDemo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name VARCHAR(20),
-> Amount INT
-> );
เพิ่มข้อมูลตัวอย่าง
mysql> INSERT INTO setAllValuesDemo(Name, Amount) VALUES
('John', 2345), ('Carol', 47586), ('Bob', 95686), ('David', 95667);
แสดงข้อมูลก่อน
mysql> SELECT * FROM setAllValuesDemo;
ผลลัพธ์:
+----+-------+--------+ | Id | Name | Amount | +----+-------+--------+ | 1 | John | 2345 | | 2 | Carol | 47586 | | 3 | Bob | 95686 | | 4 | David | 95667 | +----+--------+--------+
ตั้งค่า Amount = 10500 ทุกแถว
mysql> UPDATE setAllValuesDemo SET Amount = 10500; Query OK, 4 rows affected (0.20 sec)
ตรวจสอบหลังอัปเดต
mysql> SELECT * FROM setAllValuesDemo;
ผลลัพธ์:
+----+-------+--------+ | Id | Name | Amount | +----+-------+--------+ | 1 | John | 10500 | | 2 | Carol | 10500 | | 3 | Bob | 10500 | | 4 | David | 10500 | +----+--------+--------+
⚠️ คำเตือนสำคัญ
- ไม่มี WHERE = อัปเดตทุกแถวในตาราง
- ไม่สามารถ Undo ได้ (ยกเว้นอยู่ใน Transaction และยังไม่ Commit)
- ควร
SELECTก่อนเพื่อยืนยันข้อมูลที่จะถูกอัปเดต - ใน Production ควรมี Backup ก่อนรัน UPDATE แบบไม่มี WHERE
กรณีใช้งานจริง
- Reset ค่าตั้งต้น:
UPDATE settings SET value = 'default' - Initialize คอลัมน์ใหม่:
ALTER TABLE t ADD col INT DEFAULT 0; UPDATE t SET col = 0; - Batch update สถานะ:
UPDATE orders SET status = 'archived' WHERE created_at < '2020-01-01'(มี WHERE)
ตัวเลือกปลอดภัยกว่า
-- ใช้ WHERE 1=1 แทน (บังคับให้คิดว่ามีเงื่อนไข) UPDATE table_name SET column = value WHERE 1=1; -- หรือใช้ LIMIT (MySQL extension) จำกัดจำนวนแถว UPDATE table_name SET column = value LIMIT 1000;