首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据库字段递增1

问将数据库字段递增1
EN

Stack Overflow用户
提问于 2010-05-04 12:40:14
回答 5查看 206.5K关注 0票数 171

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

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

所以表可能是这样的..

代码语言:javascript
复制
firstName----|----lastName----|----logins

John               Jones             1
Steve              Smith             3

我正在寻找一个命令,当运行时,要么插入一个新的人(即Tom Rogers),要么在John Jones是使用的名字的情况下增加登录。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-05-04 12:41:22

更新条目:

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

代码语言:javascript
复制
UPDATE mytable 
  SET logins = logins + 1 
  WHERE id = 12

插入新行,或更新(如果已存在):

如果您想要更新以前存在的行,或者在它不存在时插入它,您可以使用REPLACE syntax或INSERT...ON DUPLICATE KEY UPDATE选项(就像Rob Van Dam在his answer中演示的那样)。

插入新条目:

或者你正在寻找像INSERT...MAX(logins)+1这样的东西?从本质上讲,您将运行如下所示的查询-根据您的特定需求,可能会更复杂一些:

代码语言:javascript
复制
INSERT into mytable (logins) 
  SELECT max(logins) + 1 
  FROM mytable
票数 321
EN

Stack Overflow用户

发布于 2010-05-04 13:19:36

如果您可以安全地将(firstName,lastName)作为主键,或者至少将唯一键放在主键上,那么您可以这样做:

代码语言:javascript
复制
INSERT INTO logins (firstName, lastName, logins) VALUES ('Steve', 'Smith', 1)
ON DUPLICATE KEY UPDATE logins = logins + 1;

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

票数 74
EN

Stack Overflow用户

发布于 2017-02-01 01:23:20

这更多的是上面一些建议使用ON DUPLICATE KEY UPDATE的答案的脚注,注意,这不是总是复制安全的,所以如果你计划扩展到超过一台服务器,你会想要避免这种情况,并使用两个查询,一个用于验证是否存在,然后第二个查询,如果行存在,则使用UPDATE,或者当行不存在时,使用INSERT。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2762851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档