2009-10-19 7 views
5

Ich habe eine Tabelle mit 4 Spalten. Ich möchte in der Lage sein, die Wertespalte bei der Erstellung INSERT oder UPDATE zu sein (ich interessiere mich nicht für Index-Zeilen-IDs).MySQL - Erstellen Sie einen eindeutigen Index für zwei Spalten für ON DUPLICATE KEY

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

Ursprünglich wollte ich jedes Mal eine Abfrage "REPLACE INTO ..." ausführen, wenn ich einen Wert speichern wollte. Aber dann habe ich read about the problems und stattdessen eine INSERT INTO ... ON DUPLICATE KEY UPDATE gewählt.

Das Problem ist, dass ich keine einzige Spalte für die "INSERT INTO ... auf DUPLICATE KEY UPDATE" zu verwenden, um herauszufinden, ob dies eine neue Zeile ist oder ob es eine vorhandene Zeile, die sein muss aktualisiert. So

ich dachte, dass ich einen eindeutigen Schlüssel verwenden würden, die eine Mischung aus den beiden Säulen war, der diese Zeile eindeutig gemacht (

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

Allerdings bin ich mir nicht sicher, wie hier voranzubringen. Wie ich meine Fragen strukturieren diesen neuen Index zu überprüfen, wenn sie versuchen, bereits eine Reihe, um herauszufinden, existiert mit diesen beiden Spaltenwerte

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

: EDIT:

Durch die ID Primärsäule lea Entfernen ving only (setting_id, user_id, & value) Ich konnte einen PRIMARY-Index erstellen (setting_id, user_id) und dann funktionierte die folgende Abfrage. more help here.

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

Antwort

8

Die Abfrage, die Sie so etwas wie dies am Ende haben würde ... suchen

INSERT INTO table (value,user_id,setting_id) VALUES (1,34,15) 
    ON DUPLICATE KEY UPDATE value = 1, user_id = 34, setting_id = 15; 
Verwandte Themen