2009-10-19 8 views
5

J'ai une table avec 4 colonnes. Je veux pouvoir INSÉRER ou METTRE à JOUR la colonne de valeur à la création (je ne m'inquiète pas des index de rangée d'index). A l'origine, j'allais lancer une requête "REPLACE INTO ..." chaque fois que je voulais enregistrer une valeur. Mais alors j'ai read about the problems et à la place j'ai choisi INSERT INTO ... ON DUPLICATE KEY UPDATE. Le problème est que je n'ai pas de colonne unique pour le "INSERT INTO ... ON DUPLICATE KEY UPDATE" à utiliser pour déterminer s'il s'agit d'une nouvelle ligne ou s'il y a une ligne existante qui doit être actualisé.MySQL - Créer un index UNIQUE sur deux colonnes pour ON DUPLICATE KEY

donc je pensais que j'utiliser une clé unique qui était un mélange des deux colonnes qui ont rendu cette ligne unique (

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

Cependant, je ne suis pas sûr de savoir comment faire avancer d'ici. Comment faire Je structure mes requêtes pour vérifier ce nouvel indice en essayant de trouver une ligne existe déjà avec ces deux valeurs de la colonne

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

: EDIT:

en supprimant la colonne primaire ID Ica ving only (setting_id, user_id, & value) J'ai été capable de créer un index PRIMARY sur (setting_id, user_id) puis la requête suivante a fonctionné. more help here.

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

Répondre

8

La requête que vous avez serait finir par quelque chose comme ça ...

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