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

ตั้งค่าคอลัมน์เดียวให้เป็นค่าเดียวกันทั้งตารางใน MySQL (UPDATE ทั้งตาราง)

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