将数据库字段增加1

时间:2010-05-04 04:40:14

标签: mysql insert increment

使用MySQL,如果我有一个字段,比如登录,我如何在sql命令中将该字段更新为1?

我正在尝试创建一个INSERT查询,它创建firstName,lastName和logins。但是,如果firstName和lastName的组合已存在,则将登录增加1。

因此表格看起来像这样..

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

John               Jones             1
Steve              Smith             3

我正在执行一个命令,在运行时会插入一个新人(即Tom Rogers)或增加登录,如果John Jones是使用的名称..

5 个答案:

答案 0 :(得分:258)

更新条目:

一个简单的增量就可以了。

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

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

如果您要更新以前存在的行,或者如果它尚不存在则插入它,您可以使用REPLACE syntaxINSERT...ON DUPLICATE KEY UPDATE选项(如Rob Van Dam所示在his answer)。

插入新条目:

或许您正在寻找类似INSERT...MAX(logins)+1的内容?从本质上讲,您运行的查询与以下内容非常相似 - 根据您的具体需求,可能会更复杂一些:

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

答案 1 :(得分:68)

如果您可以安全地创建(firstName,lastName)PRIMARY KEY或至少在其上放置一个UNIQUE键,那么您可以这样做:

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

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

答案 2 :(得分:2)

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

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具有告诉您在客户端代码中执行此语句时创建的用户标识的功能。

答案 3 :(得分:2)

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

答案 4 :(得分:1)

这是上述一些答案的更多注释,其中建议使用ON DUPLICATE KEY UPDATE BEWARE ,这是 NOT 始终是复制安全的,所以如果您计划在单个服务器之外进行扩展,那么您将要避免这种情况并使用两个查询,一个用于验证是否存在,然后是第二个 UPDATE存在一行,如果不存在则为INSERT