【问题标题】:Mysql update ifmysql更新如果
【发布时间】:2016-03-03 22:54:36
【问题描述】:

这是我尝试使用的查询。

  SET @id = 289;
    SET @feedId = 5;
    SET @statusid = 2;
    SET @processId = 1;

    SET @feedIdExists = (
     SELECT EXISTS (
       SELECT *
       FROM feed_statuses
       WHERE FeedId = @feedId));

    IF feedIdExists = 1 THEN
     UPDATE `snap`.`feed_statuses` 
      SET
      `ProcessId` = @processId , 
      `StatusId` = @statusId , 
      `ProcessEndDate` = NOW()
      WHERE
      `FeedId` = @feedId;
    ELSE
     INSERT INTO `snap`.`feed_statuses` 
      (`FeedId`, 
      `ProcessId`, 
      `StatusId`, 
      `ProcessStartDate`
      )
      VALUES 
      (@feedId,
      @processId,
      @statusId,
      NOW());
    END IF;

大家好, if 语法有 3 个错误。 我不明白。 为什么它不能正常工作?

已执行 9 个查询,6 个成功,3 个错误,0 个警告

查询:使用 snap

0 行受影响

执行时间:0.001 秒 传输时间:0.001 秒

总时间:0.002 秒

查询:SET @id = 289

0 行受影响

执行时间:0.001 秒 传输时间:0秒

总时间:0.001 秒

查询:SET @feedId = 5

0 行受影响

执行时间:0.002 秒 传输时间:0秒

总时间:0.002 秒

查询:SET @statusid = 2

0 行受影响

执行时间:0.002 秒 传输时间:0秒

总时间:0.002 秒

查询:SET @processId = 1

0 行受影响

执行时间:0.002 秒 传输时间:0秒

总时间:0.002 秒

查询:SET @feedIdExists = (SELECT EXISTS (SELECT * FROM feed_statuses WHERE FeedId = @feedId))

0 行受影响

执行时间:0.002 秒 传输时间:0秒

总时间:0.002 秒

查询:IF feedIdExists = 1 THEN UPDATE snap.feed_statuses SET ProcessId = @processId , StatusId = @statusId , ProcessEndDate ...

错误代码:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'IF feedIdExists = 1 THEN 附近使用正确的语法 更新snap.feed_statuses 放 `Pr' 在第 1 行

执行时间:0 秒 传输时间:0秒

总时间:0.002 秒

查询:ELSE INSERT INTO snap.feed_statusesFeedIdProcessIdStatusIdProcessStartDate)值(@feedId、@processId、@s...

错误代码:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'ELSE 附近使用的正确语法 插入snap.feed_statuses (FeedId, 第 1 行的“ProcessId”

执行时间:0 秒 传输时间:0秒

总时间:0.002 秒

查询:END IF

错误代码:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在第 1 行的“END IF”附近使用的正确语法

执行时间:0 秒 传输时间:0秒 总时间:0.002 秒

【问题讨论】:

  • 粘贴你得到的错误。没有他们,有人首先必须弄清楚问题是什么,然后解决问题。

标签: mysql if-statement


【解决方案1】:

您可以使用Insert ... ON DUPLICATE UPDATE 解决此问题。

注意:您必须先拥有UNIQUE 密钥,而且我认为您拥有它。

INSERT INTO `snap`.`feed_statuses` 
  (`FeedId`, 
  `ProcessId`, 
  `StatusId`, 
  `ProcessStartDate`
  )
  VALUES 
  (@feedId,
  @processId,
  @statusId,
  NOW());
ON DUPLICATE KEY
UPDATE
  `ProcessId` = @processId , 
  `StatusId` = @statusId , 
  `ProcessEndDate` = NOW()

你必须检查这个:INSERT...ON DUPLICATE KEY

【讨论】:

  • 如果我想检查它是否是例如 2 怎么办
  • 在你的问题中你只检查是否存在,这个答案是你的问题。我为您提供的链接包含此操作的完整文档。所以我不明白你会在哪里检查它是否是 2 ?
猜你喜欢
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 2014-07-04
  • 2014-09-23
  • 2016-12-10
  • 2023-03-14
相关资源
最近更新 更多