将数据库字段增加1

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

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

所以桌子可能看起来像这样。

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


John               Jones             1
Steve              Smith             3

我要执行的命令是,如果使用的名字是 John Jones,那么在运行时将插入一个新用户(例如 Tom Rogers)或增量登录。.

217587 次浏览

更新条目:

一个简单的增量就足够了。

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

你没有说你想做什么,但是你在对另一个答案的评论中已经暗示得够好了。我想你可能在找一个自动增量列

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

插入时不需要特殊代码

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

MySQLAPI 有一些函数可以告诉您在客户机代码中执行此语句时创建了什么用户 ID。

如果您可以安全地将(firstName,lastName)设置为主键,或者至少在它们上面放置一个 UNIQUE 键,那么您可以这样做:

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

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

我不是 MySQL 方面的专家,但是你可能应该看看触发器,例如 BEFOREINSERT。 在触发器中,您可以对原始表运行 select query,如果发现了什么,只需更新行‘ login’,而不是插入新值。 但是所有这些都取决于您运行的 MySQL 版本。

这更多的是一个脚注,以上的许多答案,建议使用 ON DUPLICATE KEY UPDATE小心,这是 没有总是复制安全的,所以如果你曾经计划增长超过一个单一的服务器,你会想要避免这一点,使用两个查询,一个验证的存在,然后第二个到 都不是 UPDATE当一行存在,或 INSERT当它不存在。