2010-09-25 9 views
3

Je souhaite mettre à jour un enregistrement qui peut être présent ou non dans une table. S'il n'est pas présent dans la base de données, il sera inséré.MISE À JOUR enregistrement si présent; INSERT

Pour éviter de sélectionner, j'utilise d'abord l'instruction UPDATE et je vérifie affected_rows > 0 sinon j'insère cet enregistrement dans la table.

Je me demandais s'il y avait une meilleure façon de le faire?

+0

lequel est préférable de remplacer ou d'insérer ... sur une clé en double? – Jason

+0

Ils se comportent différemment. Ils ne sont pas «meilleurs» ou «pires», mais différents. – NullUserException

Répondre

5

Vous pouvez utiliser INSERT ... ON DUPLICATE KEY UPDATE syntaxe:

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

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


La différence entre ceci et REPLACE (la réponse de Femaref) est que REPLACE va supprimer l'ancienne ligne puis insérez une nouvelle ligne si une clé est dupliquée, alors que cela va mettre à jour la ligne existante.

+0

Que faire si la base de données tombe en panne pendant le processus de remplacement? – Jason

+0

cette requête ne fonctionnera pas pour le nombre généré automatiquement n'est pas? – Jason

+0

@Jason Oui, il le fera. Tant qu'il y a une clé en double, il fera 'UPDATE' – NullUserException

Questions connexes