首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL存储过程语法IF else

MySQL存储过程语法IF else
EN

Stack Overflow用户
提问于 2012-09-09 04:02:52
回答 2查看 5.8K关注 0票数 4

伙计们,我找不到解决这个问题的办法,不管我怎么尝试,它总是给出语法错误…你能帮我看一下吗,谢谢

代码语言:javascript
复制
create procedure SP_Insert(in MatchIDP int,in TipID int, in User int)
begin

if exists(
select BetSlipID from betslips where MatchID = MatchIDP and UserID = User)
(
   update Betslips set TipID = 2
)
else
(
   insert into Betslips (MatchID,TipID , UserID) value (MatchIDP,TipID,User)
)
end if
end

我只想在插入之前检查表中是否存在数据,并且我不能使用"On duplicate key update“,因为我的主键没有任何意义,它的表中我放入了2-3个外键……

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-09 04:08:09

您的IF语法不正确。它应该是:

代码语言:javascript
复制
delimiter ;;

create procedure SP_Insert(in MatchIDP int,in TipID int, in User int)
begin

if exists(
  select * from betslips where MatchID = MatchIDP and UserID = User
) then
  update Betslips set TipID = 2; -- where ?
else
  insert into Betslips (MatchID,TipID , UserID) values (MatchIDP, TipID, User);
end if;

end;;

但是,如果您永远不允许在Betslips中存在重复(MatchID, UserID)条目,为什么不跨这些列定义一个UNIQUE约束,然后使用INSERT ... ON DUPLICATE KEY UPDATE

代码语言:javascript
复制
ALTER TABLE Betslips ADD UNIQUE INDEX (MatchID, UserID);

INSERT INTO Betslips (MatchID, TipID, UserID) VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE TipID = 2;
票数 2
EN

Stack Overflow用户

发布于 2012-09-09 04:10:49

代码语言:javascript
复制
CREATE PROCEDURE SP_Insert (IN MatchIDP INT, IN TipID INT, IN USER INT)
BEGIN
        DECLARE existing INT DEFAULT NULL;

        SELECT BetSlipID
        INTO   existing
        FROM   betslips
        WHERE  MatchID = MatchIDP
        AND    UserID = USER;

        IF existing is not null THEN
            UPDATE Betslips SET TipID = 2;
        ELSE
            INSERT INTO Betslips (MatchID, TipID, UserID)
            VALUES (MatchIDP, TipID, USER);
        END IF;

END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12334026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档