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é..
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
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.
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.
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.
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.