2009-10-19 8 views
5

4列のテーブルがあります。作成時に値の列をINSERTまたはUPDATEできるようにしたい(インデックスの行IDは気にしない)。MySQL - ON DUPLICATE KEYの2つの列にUNIQUEインデックスを作成する

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

元々、私は値を保存するたびに "REPLACE INTO ..."クエリを実行しようとしていました。しかし、私はread about the problemsと代わりにINSERT INTO ... ON DUPLICATE KEY UPDATEを選択しました。

問題は、「INSERT INTO ... ON DUPLICATE KEY UPDATE」の単一列がないため、これが新しい行かどうか、または既存の行が必要かどうかを判断することができないということです更新しました。

だから私はどうすればよいです。私は、この行が一意作られた2つの列のミックス(

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

しかし、私はここから進出するかどうかはわかりませんしてUNIQUEキーを使用することを考え出し私は、行がすでにこれらの2つの列の値で存在把握しようと、この新しいINDEXを確認するために私のクエリを構築

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

:?EDIT:

をID主要コラムリーを除去することによりvingのみ(setting_id、user_id、&の値)(setting_id、user_id)にPRIMARYインデックスを作成できました。 more help here

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

答えて

8

あなたはこのような何かを探して終わるだろう持っているクエリ...

INSERT INTO table (value,user_id,setting_id) VALUES (1,34,15) 
    ON DUPLICATE KEY UPDATE value = 1, user_id = 34, setting_id = 15; 
関連する問題