Incrémenter un champ de base de données par 1

avec MySQL, si j'ai un champ, disons logins, Comment pourrais-je mettre à jour ce champ par 1 dans une commande sql?

j'essaie de créer une requête INSERT, qui crée le prénom, le lastName et les logins. Cependant, si la combinaison de firstName et lastName existe déjà, incrémentez les logins de 1.

donc la table pourrait ressembler à ça..

firstName----|----lastName----|----logins

John               Jones             1
Steve              Smith             3

je suis après une commande qui, lorsqu'elle est exécutée, insérerait nouvelle personne (c.-à-d. Tom Rogers) ou ouverture de session si John Jones était le nom utilisé..

125
demandé sur Matt 2010-05-04 08:40:14

5 réponses

mise à jour d'une entrée:

un simple incrément devrait faire l'affaire.

UPDATE mytable 
  SET logins = logins + 1 
  WHERE id = 12

ajouter une nouvelle ligne, ou mettre à jour si déjà présent:

si vous souhaitez mettre à jour une ligne déjà existante, ou l'insérer si elle n'existe pas déjà, vous pouvez utiliser la syntaxe REPLACE ou la syntaxe INSERT...ON DUPLICATE KEY UPDATE INSERT...ON DUPLICATE KEY UPDATE option (comme Rob Van Dam démontré en sa réponse ).

, en insérant une nouvelle rubrique:

ou peut-être que vous cherchez quelque chose comme INSERT...MAX(logins)+1 ? Essentiellement, vous effectueriez une recherche semblable à celle qui suit - peut-être un peu plus complexe selon vos besoins particuliers:

INSERT into mytable (logins) 
  SELECT max(logins) + 1 
  FROM mytable
239
répondu Sampson 2017-05-23 12:34:45

si vous pouvez sans risque faire (prénom, nom de famille) la clé primaire ou au moins mettre une clé UNIQUE sur eux, alors vous pouvez faire ceci:

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 devriez aller chercher ce que cette clé primaire est en premier, donc je ne pense pas que vous pourriez obtenir ce que vous voulez dans une requête.

64
répondu Rob Van Dam 2010-05-04 05:19:35

vous n'avez pas dit ce que vous essayez de faire, mais vous l'avez laissé entendre assez bien dans les commentaires à l'autre réponse. Je pense que vous êtes probablement à la recherche d'une augmentation automatique colonne

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 insert. Juste

insert into logins (username, password) values ('user','pass');

L'API MySQL a des fonctions pour vous dire quel userid a été créé lorsque vous exécutez cette instruction dans le code client.

2
répondu Ken Bloom 2010-05-04 05:06:38

Je ne suis pas expert en MySQL mais vous devriez probablement regarder sur les déclencheurs par exemple avant D'insérer. Dans le trigger, vous pouvez lancer select query sur votre table d'origine et si elle a trouvé quelque chose il suffit de mettre à jour la ligne 'logins' au lieu d'insérer de nouvelles valeurs. Mais tout cela dépend de la version de MySQL vous courir.

2
répondu Serg Gulko 2010-05-04 05:30:53

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 , méfiez-vous que c'est pas toujours la réplication Sécuritaire, donc si vous jamais projetez de croître au-delà d'un seul serveur, vous voudrez éviter cela et utiliser deux requêtes, une pour vérifier l'existence, et puis une seconde à soit "151990920 UPDATE quand une rangée existe, ou INSERT quand ce n'est pas le cas.

1
répondu oucil 2017-01-31 17:23:20