Mysql 更新如果

标签 mysql if-statement

这是我正在尝试使用的查询。

  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 附近使用的正确语法 更新snapfeed_statuses 放 “Pr”位于第 1 行

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

总时间:0.002 秒

查询:ELSE INSERT INTO snap.feed_statuses (FeedId, ProcessId, StatusId流程开始日期)值(@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 秒

最佳答案

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

注意:您必须首先拥有 UNIQUE key ,我认为您已经拥有它。

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

关于Mysql 更新如果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33996327/

相关文章:

C# - 不应该的 CS0136

java - 三元 if 运算符在常规 if 内

PHP If 语句在 MySQL boolean 列返回上返回 false

if-statement - 如何在 Clojure 中有条件地使用 let 绑定(bind)

php - 使用for循环将记录添加到数据库

php和CSV文件上传,文件带病毒怎么办?

C++ tron AI 坚持自己的道路

javascript - 比使用大量 else if 语句更有效的方法

mysql - 如何在 SQL 中获取多值属性

php - 如何使用 PHP 复制 mysql 记录并使用不同的 id 保存?