将数据库字段增加1

Mat*_*att 150 mysql insert increment

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

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

所以表可能看起来像..

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

John               Jones             1
Steve              Smith             3
Run Code Online (Sandbox Code Playgroud)

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

Sam*_*son 272

更新条目:

一个简单的增量应该可以解决问题.

UPDATE mytable 
  SET logins = logins + 1 
  WHERE id = 12
Run Code Online (Sandbox Code Playgroud)

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

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

插入新条目:

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

INSERT into mytable (logins) 
  SELECT max(logins) + 1 
  FROM mytable
Run Code Online (Sandbox Code Playgroud)

  • 此外,请务必根据您的应用程序添加WHERE子句. (3认同)
  • @Matt您的问题是"关于**更新**,以1",这引起了混乱.我想你可能正在寻找另一种解决方案,我已在最新的答案中提到了这个解决方案. (2认同)

Rob*_*Dam 70

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

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

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

  • +1我认为这最终是OP想要的. (2认同)
  • 请注意“ON DUPLICATE KEY UPDATE”复制并不完全安全! (2认同)

ouc*_*cil 5

这更多是上面许多建议使用的答案的脚注,ON DUPLICATE KEY UPDATE注意,这并不总是复制安全的,因此,如果您计划超越单个服务器,您将需要避免这种情况并使用两个查询,一个用于验证是否存在,然后第二个用于验证 UPDATE是否INSERT存在。