2017-03-02 67 views
1

我是mySQL的新手,在這裏掙扎着創建觸發器。MySQL創建具有查詢和聚合功能的觸發器

我想要的是在向表A插入新行之前進行檢查的觸發器。如果表A在過去1小時內有超過50個數據,請刪除新行。

以下代碼是我想出的,但這是不正確的。請幫我修復它。

create trigger before_A_insert 
before insert on A 
for each row 
begin 
    declare temp int default 0 
    set temp = (
     select count(*) 
     from A 
     where id = new.id and timestampdiff(minute, new.starttime, starttime) < 60 
    ) 
    if temp = 50 then 
     set new.id = null 
    end if 
end; 
+0

這不會丟棄新行,它只是插入與'id'設置爲'NULL'一個新行。 –

+0

@TimBiegeleisen有沒有辦法刪除新行?我的邏輯是讓它拋出一個異常,假設id不能爲空。 –

回答

0

用這樣的方式:

DELIMITER $$ 
CREATE TRIGGER before_A_insert 
BEFORE INSERT ON A FOR EACH ROW 
begin 

declare temp int default 0 

    select count(*) into @temp from A where id = new.id and timestampdiff(minute, new.starttime, starttime) < 60); 
    if @temp = 50 then 
     set new.id = null; 
    end if; 

END; 
$$ 
DELIMITER ; 
+0

我不知道你的查詢邏輯是,這只是從查詢構造傳遞變量。 –

+0

我測試了代碼,它返回一個語法錯誤。我做錯了什麼嗎?我的邏輯是試圖計算在60分鐘內添加的new.id的數據。如果計數達到50,則放棄新的行。我將id設置爲null,因此它終止並引發異常。有沒有更好的方法來刪除新行? –

+0

你確定你的表名是A嗎? –