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

เพิ่มค่าให้ทุกแถวใน MySQL ด้วย UPDATE

การเพิ่มค่าคงที่ให้ทุกแถวในคอลัมน์

ใช้ 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_ADDADDDATE(col, INTERVAL 1 MONTH)
DATE_SUB(date, INTERVAL n UNIT)ลบช่วงเวลาDATE_SUB(col, INTERVAL 1 YEAR)
SUBDATE(date, INTERVAL n UNIT)เหมือน DATE_SUBSUBDATE(col, INTERVAL 1 WEEK)

⚠️ ข้อควรระวัง

  • ไม่มี WHERE = อัปเดตทุกแถว (ไม่สามารถ Undo ได้ง่าย)
  • ทดสอบด้วย SELECT ก่อน: SELECT Id, Amount, Amount+20 FROM table
  • Backup ข้อมูลก่อนรัน UPDATE จำนวนมาก
  • NULL + number = NULL ต้องจัดการ NULL ก่อน