152 votes

Incrémente de 1 un champ de la base de données

Avec MySQL, si j'ai un champ, disons de logins, comment puis-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 nom et les logins. Cependant, si la combinaison de firstName et lastName existe déjà, les logins sont incrémentés de 1.

donc le tableau pourrait ressembler à ceci

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

John               Jones             1
Steve              Smith             3

Je cherche une commande qui, lorsqu'elle est exécutée, insère une nouvelle personne (par exemple Tom Rogers) ou incrémente les connexions si John Jones est le nom utilisé

276voto

Jonathan Sampson Points 121800

Mise à jour d'une entrée :

Un simple incrément devrait faire l'affaire.

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

Insérer une nouvelle ligne, ou mettre à jour si elle est déjà présente :

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

Insertion d'une nouvelle entrée :

Ou peut-être cherchez-vous quelque chose comme INSERT...MAX(logins)+1 ? Pour l'essentiel, vous exécutez une requête 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

70voto

Rob Van Dam Points 5073

Si vous pouvez sans risque faire de (firstName, lastName) la PRIMARY KEY ou au moins leur attribuer une clé UNIQUE, alors vous pouvez le faire :

INSERT INTO logins (firstName, lastName, logins) VALUES ('Steve', 'Smith', 1)
ON DUPLICATE KEY UPDATE logins = logins + 1;

Si vous ne pouvez pas le faire, vous devrez d'abord récupérer la clé primaire, quelle qu'elle soit, et je ne pense pas que vous puissiez obtenir ce que vous voulez en une seule requête.

2voto

Ken Bloom Points 27197

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 pour l'insertion. Il suffit d'aller sur

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

L'API MySQL dispose de fonctions permettant de savoir quel userid a été créé lorsque vous exécutez cette instruction dans le code client.

2voto

Serg Gulko Points 1

Je ne suis pas expert en MySQL mais vous devriez probablement vous pencher sur les triggers, par exemple BEFORE INSERT. Dans le déclencheur, vous pouvez exécuter une requête de sélection sur votre table originale et s'il trouve 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 que vous utilisez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X