2017-04-08 63 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