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

INSERT และ UPDATE ในคิวรี่เดียวกันด้วย ON DUPLICATE KEY UPDATE ใน MySQL

รวมการ Insert และ Update ด้วย ON DUPLICATE KEY UPDATE

MySQL รองรับการ Insert ข้อมูลใหม่ และ Update ข้อมูลเดิม ในคำสั่งเดียวกันผ่าน ON DUPLICATE KEY UPDATE ซึ่งทำงานเมื่อพบ **Primary Key** หรือ **Unique Key** ซ้ำ

Syntax

INSERT INTO table_name (col1, col2, ...) 
VALUES (val1, val2, ...)
ON DUPLICATE KEY UPDATE col2 = new_value, ...;

ตัวอย่างการใช้งาน

สร้างตารางที่มี Primary Key:

mysql> CREATE TABLE DemoTable (
    Id INT NOT NULL PRIMARY KEY,
    Number INT
);
Query OK, 0 rows affected (0.83 sec)

ทดสอบ Insert ครั้งแรก (ข้อมูลใหม่):

mysql> INSERT INTO DemoTable VALUES (1, 190) ON DUPLICATE KEY UPDATE Number = Number + 10;
Query OK, 1 row affected (0.19 sec)

mysql> INSERT INTO DemoTable VALUES (2, 130) ON DUPLICATE KEY UPDATE Number = Number + 10;
Query OK, 1 row affected (0.19 sec)

ทดสอบ Insert ซ้ำ (Primary Key 1 และ 2 ซ้ำ) -> จะทำ Update แทน:

mysql> INSERT INTO DemoTable VALUES (1, 190) ON DUPLICATE KEY UPDATE Number = Number + 10;
Query OK, 2 rows affected (0.14 sec)  -- 2 rows = 1 insert attempt + 1 update

mysql> INSERT INTO DemoTable VALUES (2, 130) ON DUPLICATE KEY UPDATE Number = Number + 10;
Query OK, 2 rows affected (0.17 sec)

ตรวจสอบผลลัพธ์ - ค่า Number เพิ่มขึ้น 10 จากค่าเดิม:

mysql> SELECT * FROM DemoTable;
+----+--------+
| Id | Number |
+----+--------+
| 1  | 200    |  -- 190 + 10
| 2  | 140    |  -- 130 + 10
+----+--------+
2 rows in set (0.00 sec)

จุดสำคัญ

  • ต้องมี **Primary Key** หรือ **Unique Index** ถึงจะทำงาน
  • VALUES() ในส่วน UPDATE หมายถึงค่าที่พยายาม Insert เข้าไป (ไม่ใช่ค่าเดิมในตาราง)
  • คืนค่า 1 row affected = Insert ใหม่, 2 rows affected = Update ข้อมูลเดิม
  • เหมาะสำหรับ Upsert (Update + Insert) และนับจำนวน/สะสมค่า