2010-01-31 49 views
10

Tôi đang xây dựng hệ thống xếp hạng và tôi muốn chèn một hàng mới, nếu trường namekhông đã chứa name tôi muốn chèn và nếu nó tồn tại, tôi muốn tăng lĩnh vực count bởi 1MySQL Insert on Duplicate Key

Ví dụ, nếu tôi có một hàng các các name 'Tom' và tôi cố gắng để chèn hàng khác với name 'Tom, sau đó tôi muốn +1 cho trường count trên hàng đó đã tồn tại.

Nếu một hàng với name 'Tom' không tồn tại, tôi muốn chèn một cái mới và thiết lập count để 1.

Tôi biết tôi có thể làm điều này với khoảng 3 câu lệnh SQL và một số if báo cáo, nhưng điều đó sẽ làm chậm kịch bản khi lệnh 2/3 sql đang được thực hiện.

Bất kỳ ý tưởng nào? Cảm ơn!

Trả lời

12

thấy INSERT ... ON DUPLICATE KEY UPDATE

Nếu bạn chỉ định ON DUPLICATE CẬP NHẬT KEY, và một hàng được chèn vào có thể gây ra một giá trị trùng lặp trong một chỉ số UNIQUE hoặc PRIMARY KEY, một UPDATE của hàng cũ được thực hiện.

ví dụ:

INSERT INTO table (name,counter) VALUES ('Bob', 1) 
    ON DUPLICATE KEY UPDATE counter=counter+1 
+0

hmm, nó không hoàn toàn hoạt động - không có lỗi. Tôi có thể chỉ định trường mà nó nên "ON DUPLICATE" của? – tarnfeld

+0

được sắp xếp, tôi đã thêm nó vào phím CHÍNH CỦA bảng: D – tarnfeld

+0

Không phải là khóa chính. Một phím duy nhất đủ (mặc dù PRIMARY luôn luôn là duy nhất) – VolkerK

Các vấn đề liên quan