2015-11-02 1 views
0

J'ai une table qui a un PK auto-incrémenté, et, entre autres colonnes, une colonne qui a un index non-unique, mais il y a des données que je connais est unique, nommé column4.INSERT ou UPDATE MySQL lors de la mise à jour d'une colonne indexée non-clé?

Est-il possible de faire une

(INSERT if column4="this_data") or (UPDATE if column4!="this_data") 

?

Ou est-ce que je préfère juste utiliser deux requêtes - un SELECT pour obtenir l'identifiant PK de la ligne où column4 = "this_data", puis un INSERT ou UPDATE une fois que je sais si la ligne existe?

Merci pour votre temps et votre aide.

+1

http://dev.mysql.com/doc/refman/5.0/ fr/insert-on-duplicate.html cochez ce lien –

+0

Pourquoi ne pas simplement ajouter la clé unique? – Arth

+0

La colonne contient les identifiants d'utilisateur uniquement si l'utilisateur est d'un type particulier - pour tous les autres utilisateurs, j'ai des zéros, ce qui signifie que je ne peux pas avoir un index unique. Ainsi, un exemple de données dans cette colonne à partir de 5 lignes peut être 0,0,343555,0,0. En fait, devrais-je remplacer les zéros par NULL? Pouvez-vous avoir plusieurs valeurs nulles dans une colonne indexée unique? – Shaun

Répondre

0

Utilisez INSERT Duplicate MISE À JOUR CLÉ

INSERT INTO table (col) 
VALUES ('$val') 
ON DUPLICATE KEY UPDATE col=col+1; 

Ou vous pouvez: -

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) 
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b); 

More details

+0

Merci Rahautos. Cela ne fonctionne pas, car ils peuvent avoir plusieurs lignes de la façon dont les index sont configurés, donc la clé ON DUPLICATE n'est pas déclenchée. – Shaun

+0

Cela dépend de la colonne ayant une clé unique, que l'OP a explicitement déclaré que ce n'est pas – Arth

+0

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html –