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)
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)
如果你不能这样做,那么你必须先获取主键的所有内容,所以我认为你不能在一个查询中实现你想要的.
这更多是上面许多建议使用的答案的脚注,ON DUPLICATE KEY UPDATE请注意,这并不总是复制安全的,因此,如果您计划超越单个服务器,您将需要避免这种情况并使用两个查询,一个用于验证是否存在,然后第二个用于验证行 UPDATE是否INSERT存在。
| 归档时间: |
|
| 查看次数: |
175141 次 |
| 最近记录: |