การเพิ่มค่าคงที่ให้ทุกแถวในคอลัมน์
ใช้ UPDATE โดยไม่มี WHERE clause เพื่ออัปเดตทุกแถวในตาราง
กรณีคอลัมน์ตัวเลข (Integer)
-- เพิ่มค่าคงที่ให้ทุกแถว
UPDATE yourTableName SET yourIntColumn = yourIntColumn + 20;
-- จัดการ NULL ก่อน (NULL + 20 = NULL)
UPDATE yourTableName SET yourIntColumn = 0 WHERE yourIntColumn IS NULL;
UPDATE yourTableName SET yourIntColumn = yourIntColumn + 20;
กรณีคอลัมน์วันที่ (Date)
-- เพิ่ม 1 เดือนให้ทุกแถว
UPDATE yourTableName SET yourDateColumn = DATE_ADD(yourDateColumn, INTERVAL 1 MONTH);
-- หรือใช้ ADDDATE
UPDATE yourTableName SET yourDateColumn = ADDDATE(yourDateColumn, INTERVAL 1 MONTH);
ตัวอย่างการใช้งาน
สร้างตาราง:
CREATE TABLE addEachRowValue (
Id INT NOT NULL AUTO_INCREMENT,
Amount INT,
ShippingDate DATE,
PRIMARY KEY(Id)
);
เพิ่มข้อมูล:
INSERT INTO addEachRowValue(Amount, ShippingDate) VALUES(100, '2019-02-21');
INSERT INTO addEachRowValue(Amount, ShippingDate) VALUES(10, '2013-04-22');
INSERT INTO addEachRowValue(Amount, ShippingDate) VALUES(110, '2015-10-25');
INSERT INTO addEachRowValue(Amount, ShippingDate) VALUES(150, '2016-03-27');
INSERT INTO addEachRowValue(Amount, ShippingDate) VALUES(190, '2018-12-29');
เพิ่ม 20 ให้ Amount ทุกแถว:
UPDATE addEachRowValue SET Amount = Amount + 20;
ผลลัพธ์ Amount:
+--------+
| Amount |
+--------+
| 120 |
| 30 |
| 130 |
| 170 |
| 210 |
+--------+
เพิ่ม 1 เดือนให้ ShippingDate ทุกแถว:
UPDATE addEachRowValue SET ShippingDate = ADDDATE(ShippingDate, INTERVAL 1 MONTH);
ผลลัพธ์ ShippingDate:
+--------------+
| ShippingDate |
+--------------+
| 2019-03-21 |
| 2013-05-22 |
| 2015-11-25 |
| 2016-04-27 |
| 2019-01-29 |
+--------------+
ฟังก์ชันวันที่ที่ใช้บ่อย
| ฟังก์ชัน | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| DATE_ADD(date, INTERVAL n UNIT) | บวกช่วงเวลา | DATE_ADD(col, INTERVAL 1 DAY) |
| ADDDATE(date, INTERVAL n UNIT) | เหมือน DATE_ADD | ADDDATE(col, INTERVAL 1 MONTH) |
| DATE_SUB(date, INTERVAL n UNIT) | ลบช่วงเวลา | DATE_SUB(col, INTERVAL 1 YEAR) |
| SUBDATE(date, INTERVAL n UNIT) | เหมือน DATE_SUB | SUBDATE(col, INTERVAL 1 WEEK) |
⚠️ ข้อควรระวัง
- ไม่มี WHERE = อัปเดตทุกแถว (ไม่สามารถ Undo ได้ง่าย)
- ทดสอบด้วย SELECT ก่อน:
SELECT Id, Amount, Amount+20 FROM table - Backup ข้อมูลก่อนรัน UPDATE จำนวนมาก
- NULL + number = NULL ต้องจัดการ NULL ก่อน