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

Kỹ thuật hiệu quả nhất để xử lý bản ghi trùng lặp trong MySQL

Khi cần chèn dữ liệu nhưng muốn cập nhật nếu khóa chính hoặc khóa duy nhất đã tồn tại, INSERT ... ON DUPLICATE KEY UPDATE là giải pháp tối ưu nhất. Câu lệnh này tránh lỗi trùng khóa và thực hiện cập nhật trong một lần truy vấn.

Cú pháp

INSERT INTO ten_bang (cot1, cot2, ...) 
VALUES (gia_tri_1, gia_tri_2, ...)
ON DUPLICATE KEY UPDATE cot1 = gia_tri_moi_1, cot2 = gia_tri_moi_2, ...;

Ví dụ thực tế

Tạo bảng có ràng buộc UNIQUE trên cặp (Id, Name):

CREATE TABLE DemoTable (
    Id INT,
    Name VARCHAR(20),
    UNIQUE(Id, Name)
);

Chèn bản ghi đầu tiên (Id=101, Chris):

INSERT INTO DemoTable VALUES (101, 'Chris') 
ON DUPLICATE KEY UPDATE Id=10001, Name='Robert';

Chèn bản ghi thứ hai (Id=102, Mike):

INSERT INTO DemoTable VALUES (102, 'Mike') 
ON DUPLICATE KEY UPDATE Id=10001, Name='Robert';

Chèn lại bản ghi trùng (Id=101, Chris) — lúc này sẽ kích hoạt UPDATE:

INSERT INTO DemoTable VALUES (101, 'Chris') 
ON DUPLICATE KEY UPDATE Id=10001, Name='Robert';

Kết quả

IdName
102Mike
10001Robert

Giải thích: Bản ghi đầu tiên (101, Chris) được chèn mới. Bản ghi thứ hai (102, Mike) cũng được chèn mới. Bản ghi thứ ba trùng khóa duy nhất với bản ghi đầu tiên, nên MySQL thực hiện UPDATE thay đổi thành (10001, Robert). Kết quả cuối cùng chỉ còn 2 bản ghi.

Ưu điểm: Tự động xử lý logic "upsert" (update + insert) mà không cần kiểm tra tồn tại trước, giảm số lượng truy vấn và tránh race condition.