Wednesday, 14 November 2018

Mysql: Increment a database field by 1

With MySQL, if I have a field, of say logins, how would I go about updating that 
field by 1 within a sql command?
I'm trying to create an INSERT query, that creates firstName, lastName and logins. 
However if the combination of firstName and lastName already exists, increment the
 logins by 1.
so the table might look like this..
firstName----|----lastName----|----logins

John               Jones             1
Steve              Smith             3
I'm after a command that when run, would either insert a new person (i.e. Tom Rogers) 
or increment logins if John Jones was the name used..

 Answers


Updating an entry:

A simple increment should do the trick.
UPDATE mytable 
  SET logins = logins + 1 
  WHERE id = 12

Insert new row, or Update if already present:

If you would like to update a previously existing row, or insert it if it doesn't already exist, 
you can use the REPLACE syntax or the INSERT...ON DUPLICATE KEY UPDATE option.

Inserting a new entry:

Or perhaps you're looking for something like INSERT...MAX(logins)+1
Essentially you'd run a query much like the following - perhaps a bit more complex
 depending on your specific needs:
INSERT into mytable (logins) 
  SELECT max(logins) + 1 
  FROM mytable



You didn't say what you're trying to do, but you hinted at it well enough in the 
comments to the other answer. I think you're probably looking for an auto increment 
column
create table logins (userid int auto_increment primary key, 
  username varchar(30), password varchar(30));
then no special code is needed on insert. Just
insert into logins (username, password) values ('user','pass');
The MySQL API has functions to tell you what userid was created when you execute 
this statement in client code.



This is more a footnote to a number of the answers above which suggest the use of 
ON DUPLICATE KEY UPDATEBEWARE that this is NOT always replication safe, so if you 
ever plan on growing beyond a single server, you'll want to avoid this and use two queries, 
one to verify the existence, and then a second to either UPDATE when a row exists, or 
INSERT when it does not.

0 comments:

Post a Comment