2017-04-08 66 views
0

我试图创建一个使用MySQL的触发器,但我遇到了一个错误。约束是:用户可能不会出价他或她也销售的物品。MySQL条款时

Create Trigger before_insert_bid 
Before Insert on Bid 
for each row 
when exists(
      Select * 
      From Item 
      Where Item.UserID = new.UserID 
      AND Item.ItemID = new.ItemID 
) 
begin 
    Call 'You cannot bid on your own item'; 
end; 

对于我的生活,我不能找出错误是什么,以及如何我会解决它,我一直在试图调试这在过去一小时,我使用when子句错误还是我必须使用别的东西?

感谢您的帮助!

+1

在体内使用'if'。 –

+0

究竟如何?对不起,我是这个新手。 – vampyfreak

+0

尝试'如果存在(...' – Bohemian

回答

0

在MySQL中,触发是这样的:

delimiter $$ 

create Trigger before_insert_bid before Insert on Bid for each row 
begin 
    if (exists (Select 1 from Item i Where i.UserID = new.UserID and i.ItemID = new.ItemID)) 
    then 
     signal sqlstate '45000' set message_text = 'You cannot bid on your own item'; 
    end if; 
end;$$ 

delimiter ; 

由于MySQL的5.5,signal是从触发器返回错误的优选方法。

+0

感谢您的帮助,而是因为我们学校的MySQL的心不是高达日期 – vampyfreak

+0

如果我想添加另一个约束为相同的触发,我们不能使用的信号,我怎么会去这样做呢? – vampyfreak

+0

@vampyfreak。你添加另一个“if”。 –

0

是这样的:

... 
for each row 
IF EXISTS( 
     Select * 
     From Item 
     Where Item.UserID = new.UserID 
     AND Item.ItemID = new.ItemID 
) then 
    begin 
     Call `You cannot bid on your own item`; 
    end; 
end if; 
+0

我曾尝试类似的东西,但它的调用语句抛出一个错误,认为语法心不是正确的,你知道?为什么任何机会 – vampyfreak

+0

@vampyfreak - 什么是错误讯息 –

+0

你在你的SQL语法错误;检查手册,该手册科尔esponds你的MySQL服务器版本使用附近的“正确的语法:”在第11 – vampyfreak