2009-10-19 60 views
5

Tôi có một bảng có 4 cột. Tôi muốn có thể INSERT hoặc UPDATE cột giá trị khi tạo (tôi không quan tâm đến chỉ mục ID của hàng).MySQL - Tạo chỉ mục UNIQUE trên hai cột cho ON DUPLICATE KEY

CREAT TABLE tablename (
id, (primary) 
user_id, (index) 
setting_id, (index) 
value (index) 
); 

Ban đầu tôi sẽ chạy truy vấn "REPLACE INTO ..." mỗi lần tôi muốn lưu giá trị. Nhưng sau đó tôi read about the problems và thay vào đó đã chọn một INSERT INTO ... ON UPDATE DUPLICATE KEY.

Vấn đề là tôi không có cột đơn cho "INSERT INTO ... ON UPPLING DUPLICATE KEY UPDATE" để sử dụng để tìm hiểu xem đây có phải là hàng mới hay nếu có hàng hiện tại cần phải đã cập nhật.

Vì vậy, tôi figured rằng tôi sẽ sử dụng một chìa khóa duy nhất mà là một kết hợp của hai cột khiến hàng này độc đáo (

CREATE UNIQUE INDEX index_name ON table(user_id, setting_id); 

Tuy nhiên, tôi không chắc chắn làm thế nào để thăng tiến từ đây thế nào. tôi cấu trúc truy vấn của tôi để kiểm tra INDEX mới này khi cố gắng tìm ra một hàng đã tồn tại với những giá trị hai cột

INSERT INTO `tablename` (value, user_id, setting_id) VALUES (1,34,15) ON DUPLICATE KEY UPDATE 

: EDIT:

bằng cách loại bỏ các ID lea cột chính ving chỉ (setting_id, user_id, & giá trị) Tôi đã có thể tạo một chỉ mục CHÍNH trên (setting_id, user_id) và sau đó truy vấn sau đây làm việc. more help here.

INSERT INTO tablename (user_id, setting_id, value) 
VALUES (42, 1, 12) 
ON DUPLICATE KEY UPDATE value = 12 

Trả lời

8

Các truy vấn mà bạn có sẽ kết thúc tìm kiếm một cái gì đó như thế này ...

INSERT INTO table (value,user_id,setting_id) VALUES (1,34,15) 
    ON DUPLICATE KEY UPDATE value = 1, user_id = 34, setting_id = 15; 
Các vấn đề liên quan