将数据库字段增加1

使用MySQL,如果我有一个字段,说login,我将如何去更新该字段1在一个SQL命令内?

我试图创build一个INSERT查询,创buildfirstName,lastName和login。 但是,如果firstName和lastName的组合已经存在,请将login名加1。

所以表格可能看起来像这样

firstName----|----lastName----|----logins John Jones 1 Steve Smith 3 

我在执行一个命令后,要么插入一个新的人(即汤姆罗杰斯),要么增加login,如果约翰琼斯是使用的名字..

更新条目:

一个简单的增量应该做的伎俩。

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

插入新行,或者如果已经存在则更新:

如果你想更新一个先前存在的行,或者如果它不存在,可以插入它,你可以使用REPLACE语法或者INSERT...ON DUPLICATE KEY UPDATE选项( Rob Van Dam在他的回答中演示)。

插入一个新条目:

或者,也许你正在寻找像INSERT...MAX(logins)+1 ? 基本上你会像下面这样运行一个查询 – 根据你的具体需要可能会更复杂一点:

 INSERT into mytable (logins) SELECT max(logins) + 1 FROM mytable 

如果你可以安全地(firstName,lastName)PRIMARY KEY或者至less放一个UNIQUE键,那么你可以这样做:

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

如果你不能这样做,那么你必须首先获取主键,所以我不认为你可以在一个查询中实现你想要的。

你没有说你想做什么,但你在其他答案的评论中已经足够暗示了。 我想你可能正在寻找一个自动增量列

 create table logins (userid int auto_increment primary key, username varchar(30), password varchar(30)); 

那么在插入时不需要特殊的代码。 只是

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

MySQL API具有告诉你在客户端代码中执行这个语句时创build了哪个用户标识。

我不是MySQL的专家,但你可能应该看触发器,例如BEFORE INSERT。 在触发器中,您可以在原始表上运行select查询,如果发现某些内容只是更新“login”行而不是插入新值。 但是这一切都取决于你运行的MySQL版本。

这是更多的上述答案的脚注,其中build议使用ON DUPLICATE KEY UPDATE ,注意,这并不总是复制安全的,所以如果你打算超越单个服务器的增长,你会想要避免这个并使用两个查询,一个用于validation是否存在,然后是一个行存在时UPDATE ,或者当不存在时INSERT