Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Triển khai INSERT ... ON DUPLICATE KEY UPDATE trong MySQL

Giới thiệu

Khi chèn dữ liệu gây trùng lặp khóa chính (PRIMARY KEY) hoặc khóa duy nhất (UNIQUE INDEX), MySQL sẽ báo lỗi. Câu lệnh INSERT ... ON DUPLICATE KEY UPDATE cho phép cập nhật hàng hiện có thay vì báo lỗi.

1. Tạo bảng

mysql> create table DemoTable (
    -> Value int
    -> ); 
Query OK, 0 rows affected (0.61 sec)

2. Tạo chỉ mục duy nhất

mysql> create unique index value_index on DemoTable(Value); 
Query OK, 0 rows affected (0.77 sec)
Records: 0 Duplicates: 0 Warnings: 0

3. Chèn dữ liệu với ON DUPLICATE KEY UPDATE

mysql> insert into DemoTable values(40) on duplicate key update Value=Value+1000; 
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(50) on duplicate key update Value=Value+1000; 
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(40) on duplicate key update Value=Value+1000; 
Query OK, 2 rows affected (0.15 sec)

Giải thích:

  • Lần 1: Chèn 40 → thành công (1 row affected)
  • Lần 2: Chèn 50 → thành công (1 row affected)
  • Lần 3: Chèn 40 (trùng khóa) → cập nhật: 40 + 1000 = 1040 (2 rows affected: 1 insert + 1 update)

4. Kết quả cuối cùng

mysql> select *from DemoTable;
+-------+
| Value |
+-------+
|    50 |
|  1040 |
+-------+
2 rows in set (0.00 sec)

Ứng dụng thực tế: Thường dùng cho hệ thống đếm lượt xem, ghi log sự kiện, hoặc upsert dữ liệu từ nhiều nguồn.