Mysql update if



这是我尝试使用的查询。

  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个警告

查询:使用快照

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@statussid=2

0行受影响

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

总时间:0.002秒

查询:SET@processId=1

0行受影响

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

总时间:0.002秒

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

0行受影响

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

总时间:0.002秒

查询:如果feedIdExists=1,则更新snapfeed_statuses设置ProcessId=@processId,StatusId=@statusId,ProcessEndDate。。。

错误代码:1064您的SQL语法有错误;查看与MySQL服务器版本相对应的手册,了解在"IF feedIdExists=1 THEN"附近使用的正确语法更新snapfeed_statuses集合`第1行处的Pr

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

总时间:0.002秒

查询:ELSE INSERT INTO snapfeed_statusesFeedIdProcessIdStatusIdProcessStartDate)值(@feedId、@processId、@s…

错误代码:1064您的SQL语法有错误;查看与MySQL服务器版本相对应的手册,了解在'ELSE附近使用的正确语法插入snapfeed_statuses(CCD_ 16,`第1行上的ProcessId

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

总时间:0.002秒

查询:如果结束

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

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

您可以使用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。。。关于复制密钥

最新更新