当前位置: 首页 > 面试题库 >

有条件的ON DUPLICATE KEY UPDATE(仅在某些条件为真时更新)

毛缪文
2023-03-14
问题内容

我正在使用以下查询:

INSERT INTO userlist (username, lastupdate, programruncount, ip)
VALUES (:username, NOW(), 1, :ip)
ON DUPLICATE KEY UPDATE
lastupdate = NOW(), programruncount = programruncount + 1, ip = :ip;

但是,我也想将其作为ON DUPLICATE KEY UPDATE条件,因此它将执行以下操作:

  • 如果 lastupdate不到20分钟前(lastupdate > NOW() - INTERVAL 20 MINUTE)。
  • 正确: 更新lastupdate = NOW(),添加一个programruncount,然后更新ip = :ip
  • False: 所有字段均应保持相同。

我不太确定该怎么做,但是环顾四周之后,我尝试IFON DUPLICATE KEY UPDATE零件中使用“声明” 。

INSERT INTO userlist (username, lastupdate, programruncount, ip)
VALUES ("testuser", NOW(), "1", "127.0.0.1")
ON DUPLICATE KEY UPDATE
IF(lastupdate > NOW() - INTERVAL 20 MINUTE, VALUES(lastupdate, programruncount + 1),
lastupdate, programruncount);

但是我收到以下错误: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF(lastupdate > NOW() - INTERVAL 20 MINUTE, VALUES(lastupdate, programruncount +' at line 6


问题答案:

您使用的IF语句不正确

INSERT INTO userlist (username, lastupdate, programruncount, ip)
VALUES (:username, NOW(), 1, :ip)
ON DUPLICATE KEY UPDATE
lastupdate = IF(lastupdate > NOW() - INTERVAL 20 MINUTE, NOW(), lastupdate),
programruncount = IF(lastupdate > NOW() - INTERVAL 20 MINUTE, programruncount + 1,   programruncount),
ip = IF(lastupdate > NOW() - INTERVAL 20 MINUTE, :ip, ip);

因此,IF检查条件并返回作为其参数提供的两个值之一。参见MySQL的流控制运算符。



 类似资料:
  • null 当应用程序正在消费消息时,但随后consumeEnabled变成false的情况就没有必要考虑了。 请定义用Spring Kafka和\或Kafka Java客户机实现决策的最佳方式

  • 问题内容: 是否可以在MySQL中执行UPDATE查询,仅在满足特定条件时才更新字段值?像这样: 换一种说法: 正确的方法是什么? 问题答案: 是! 这里有另一个例子: 之所以可行,是因为MySQL不会更新该行(如果没有更改),如docs中所述: 如果将列设置为其当前值,MySQL会注意到这一点,并且不会对其进行更新。

  • 问题内容: 如果我在if块内创建变量,则以后将无法使用它。如果我在if块之前创建一个变量,而if块的计算结果为false,则会出现“变量已创建且未使用”的错误。 我敢肯定,这是设计使然,我正在尝试做我不应该做的事情,但是我想做的事情背后的逻辑对我来说很有意义。如果url中有页面信息,我以后想在sql语句中使用它,但是如果url中没有页面信息,则不需要这些变量。 http://pastebin.co

  • 下面是网页的HTML代码。 而且 我正在执行一个基于这样一个条件的程序:如果某个文本被显示,那么我必须点击动态按钮。如果下列条件为真 driver.findElements(by.xpath(“//div[starts-with(@id,'qwer')]//a[contains(text(),'holiday')]”); 然后我会点击页面上的所有按钮 下面是这方面的程序。运行此程序后,它将执行el

  • 问题内容: 据我所知,我们可以在elasticsearch中解析文档,并且当我们搜索关键字时,它将使用以下Java API代码返回文档: 现在我的问题是,假设某些文档具有如下字符串: 现在,我希望出现以下情况的文件: 我该怎么做? 问题答案: 以这种形式索引文档时,Elasticsearch将无法正确地将这些字符串解析为日期。如果您将这些字符串转换为正确格式的时间戳记,则可以执行建议的查询的唯一方

  • 我有一个关于python中一些代码的问题。我试图在3个不同的列中满足条件TRUE时提取第一行的索引。这是我正在使用的数据: 只有当有3个“真”条件时,我才需要得到索引号: 非常感谢。