2010-07-05 33 views
7

suy nghĩ của người dân là gì trên con đường thực hiện hiệu quả nhất để thực hiện truy vấn sau đây:MySQL 'CẬP NHẬT TRÊN KHÓA KHẨU' mà không có một cột duy nhất?

  • 3 bảng cột

  • nếu sự kết hợp của col_1col_2 giá trị đã tồn tại UPDATE col_3

  • else INSERT hàng mới

Tôi giả sử tôi cần một số loại nếu UPDATE TRÊN KHÓA (mà tôi đã không bao giờ được sử dụng trước), tuy nhiên tôi không có một 'KEY' nhưng thay vì một cặp hai giá trị (cột) để tạo ra một ...

Trả lời

15

Bạn có thể tạo một phím PRIMARY hoặc UNIQUE trong số nhiều cột (được gọi là khóa tổng hợp) trong MySQL, điều này sẽ cho phép ON DUPLICATE KEY hoạt động tốt.

// create a composite index 
CREATE INDEX my_composite_index ON my_table (column1, column2); 

// insert or update 
INSERT INTO my_table (column1, column2) VALUES ('value1', 'value2') ON DUPLICATE KEY UPDATE column3=column3+1; 
+0

cảm ơn ceejayoz, bạn có thể cung cấp cho tôi một số mã mẫu cho ON DUPLICATE KEY không? – Haroldo

+0

@Haroldo Xong, xem chỉnh sửa. – ceejayoz

+0

tuyệt vời, thực sự là loại bạn - cảm ơn rất nhiều! Tôi nên nhanh chóng kiểm tra - tôi chỉ cần tạo chỉ mục một lần phải không? – Haroldo

1

Cách hiệu quả nhất là tạo UNIQUE KEY và sử dụng ON CẬP NHẬT KEY DUPLICATE.

cách chậm là:
KHÓA TABLE
CHỌN TABLE (bạn cần một chỉ số nào cho hiệu quả tốt nhất)
nếu tồn tại, CẬP NHẬT
khác INSERT
UNLOCK BẢNG

-1

Chỉnh sửa: Bỏ qua đề xuất của tôi

Bạn có thể sử dụng khóa tổng hợp như ceejayoz đã nói, tuy nhiên tôi nghĩ bạn cần REPLACE INTO thay vì UPDATE ON DU PLICATE KEY vì REPLACE cũng chèn nếu không tìm thấy bản sao.

Lưu ý: Tôi không biết các hoạt động của CẬP NHẬT TRÊN KHU VỰC DUPLICATE nhưng có vẻ như nó không thực hiện chèn.

+3

'ON CẬP NHẬT KEY UPPLING 'chỉ dành cho các truy vấn' INSERT'. http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html 'REPLACE INTO' là một lựa chọn không tốt vì nó không cho phép bạn cập nhật chỉ một hoặc hai trường - bạn có để chỉ định giá trị cho toàn bộ hàng. – ceejayoz

+0

Tệ của tôi, cảm ơn nhận xét –

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