2009-10-19 16 views
5

Ho una tabella con 4 colonne. Voglio essere in grado di INSERIRE o AGGIORNARE la colonna dei valori durante la creazione (non mi interessa l'ID delle righe degli indici).MySQL - Creare un indice UNIQUE su due colonne per ON DUPLICATE KEY

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

Originariamente stavo per eseguire una query "REPLACE INTO ..." ogni volta che volevo salvare un valore. Ma poi ho read about the problems e invece ho scelto INSERT INTO ... ON DUPLICATE KEY UPDATE.

Il problema è che non ho una singola colonna per "INSERIRE SU ON DUPLICATE KEY UPDATE" da usare per capire se questa è una nuova riga o se c'è una riga esistente che deve essere aggiornato.

così ho pensato che avrei usato una chiave univoca che era un mix delle due colonne che hanno reso questa riga unica (

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

Tuttavia, non sono sicuro di come avanzare da qui. Come fare I strutturare le mie domande di controllare questo nuovo indice quando si cerca di capire una riga esiste già con questi due valori delle colonne

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

:? EDIT:

rimuovendo l'ID primario lea colonna ving only (setting_id, user_id, & value) Sono stato in grado di creare un indice PRIMARY su (setting_id, user_id) e quindi ha funzionato la seguente query. more help here.

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

risposta

8

La query avete finirebbe per guardare qualcosa di simile ...

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