Avec MySQL, si j'ai un champ, par exemple des connexions, comment pourrais-je mettre à jour ce champ de 1 dans une commande SQL?
J'essaie de créer une requête INSERT, qui crée firstName, lastName et les connexions. Cependant, si la combinaison de firstName et lastName existe déjà, incrémentez les connexions de 1.
donc le tableau pourrait ressembler à ceci.
firstName----|----lastName----|----logins
John Jones 1
Steve Smith 3
Je suis après une commande qui, lorsqu'elle est exécutée, insérerait une nouvelle personne (par exemple, Tom Rogers) ou incrémenterait les connexions si John Jones était le nom utilisé.
INSERT
, pas unUPDATE
. Si vous souhaitez faire une insertion, vous devrez obtenir le maximum et y ajouter 1.Si vous pouvez créer en toute sécurité (firstName, lastName) la CLÉ PRIMAIRE ou au moins y mettre une clé UNIQUE, vous pouvez le faire:
Si vous ne pouvez pas faire cela, vous devrez d'abord récupérer la clé primaire, donc je ne pense pas que vous puissiez obtenir ce que vous voulez en une seule requête.
la source
ON DUPLICATE KEY UPDATE
réplication n'est pas totalement sûre!Vous n'avez pas dit ce que vous essayez de faire, mais vous l'avez assez bien fait allusion dans les commentaires de l'autre réponse. Je pense que vous recherchez probablement une colonne d'incrémentation automatique
alors aucun code spécial n'est nécessaire lors de l'insertion. Juste
L'API MySQL a des fonctions pour vous dire quel userid a été créé lorsque vous exécutez cette instruction dans le code client.
la source
Je ne suis pas expert en MySQL mais vous devriez probablement regarder les déclencheurs, par exemple AVANT D'INSERER. Dans le déclencheur, vous pouvez exécuter une requête de sélection sur votre table d'origine et si elle trouve quelque chose, mettez simplement à jour la ligne «connexions» au lieu d'insérer de nouvelles valeurs. Mais tout cela dépend de la version de MySQL que vous utilisez.
la source
Ceci est plus une note de bas de page à un certain nombre de réponses ci-dessus qui suggèrent l'utilisation de
ON DUPLICATE KEY UPDATE
, ATTENTION , ce n'est PAS toujours sûr pour la réplication, donc si vous prévoyez de vous développer au-delà d'un seul serveur, vous voudrez éviter cela et utiliser deux requêtes , une pour vérifier l'existence, puis une seconde pour soitUPDATE
lorsqu'une ligne existe, soitINSERT
lorsqu'elle n'existe pas.la source