这是我尝试使用的查询。
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,则更新snap
。feed_statuses
设置ProcessId
=@processId,StatusId
=@statusId,ProcessEndDate
。。。
错误代码:1064您的SQL语法有错误;查看与MySQL服务器版本相对应的手册,了解在"IF feedIdExists=1 THEN"附近使用的正确语法更新snap
。feed_statuses
集合`第1行处的Pr
执行时间:0秒传输时间:0秒
总时间:0.002秒
查询:ELSE INSERT INTO snap
。feed_statuses
(FeedId
、ProcessId
、StatusId
、ProcessStartDate
)值(@feedId、@processId、@s…
错误代码:1064您的SQL语法有错误;查看与MySQL服务器版本相对应的手册,了解在'ELSE附近使用的正确语法插入snap
。feed_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。。。关于复制密钥