Avec MySQL, si j'ai un champ, par exemple des connexions, comment le mettre à jour par 1 dans une commande sql?
J'essaie de créer une requête INSERT, qui crée firstName, lastName et les connexions. Toutefois, si la combinaison firstName et lastName existe déjà, incrémentez les connexions de 1.
donc la table pourrait ressembler à ceci ..
firstName----|----lastName----|----logins
John Jones 1
Steve Smith 3
Je cherche une commande qui, une fois lancée, insère une nouvelle personne (Tom Rogers) ou incrémente des connexions si John Jones était le nom utilisé.
Un simple incrément devrait faire l'affaire.
_UPDATE mytable
SET logins = logins + 1
WHERE id = 12
_
Si vous souhaitez mettre à jour une ligne existante ou l'insérer si elle n'existe pas déjà, vous pouvez utiliser la syntaxe _ (REPLACE
) ou INSERT...ON DUPLICATE KEY UPDATE
option (As Rob Van Dam démontré dans sa réponse ).
Ou peut-être cherchez-vous quelque chose comme INSERT...MAX(logins)+1
? Essentiellement, vous exécuteriez une requête très semblable à la suivante, peut-être un peu plus complexe en fonction de vos besoins spécifiques:
_INSERT into mytable (logins)
SELECT max(logins) + 1
FROM mytable
_
Si vous pouvez créer en toute sécurité (firstName, lastName) la clé primaire ou tout au moins leur attribuer une clé unique, procédez comme suit:
INSERT INTO logins (firstName, lastName, logins) VALUES ('Steve', 'Smith', 1)
ON DUPLICATE KEY UPDATE logins = logins + 1;
Si vous ne pouvez pas faire cela, alors vous devrez extraire ce que la clé primaire est en premier, alors je ne pense pas que vous puissiez obtenir ce que vous voulez en une seule requête.
Vous n’avez pas dit ce que vous essayez de faire, mais vous l’avez assez bien laissé entendre dans les commentaires de l’autre réponse. Je pense que vous cherchez probablement une colonne à incrémentation automatique
create table logins (userid int auto_increment primary key,
username varchar(30), password varchar(30));
alors aucun code spécial n'est nécessaire sur l'insertion. Juste
insert into logins (username, password) values ('user','pass');
L'API MySQL a des fonctions pour vous dire quel ID utilisateur a été créé lorsque vous exécutez cette instruction dans le code client.
Je ne suis pas expert en MySQL mais vous devriez probablement regarder par exemple sur les déclencheurs. AVANT INSÉRER. Dans le déclencheur, vous pouvez exécuter une requête select sur votre table d'origine et si elle trouve quelque chose, mettez à jour la ligne 'logins' au lieu d'insérer de nouvelles valeurs. Mais tout dépend de la version de MySQL que vous utilisez.
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 qu'il s'agit de PAS toujours sécurisé pour la réplication, donc, si vous envisagez de vous étendre 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 soit UPDATE
quand une ligne existe, ou INSERT
quand ce n'est pas le cas.