2017-03-02 7 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

、それだけで '' NULL'に設定id'に新しい行を挿入します。 –

+0

@TimBiegeleisen新しい行を削除する方法はありますか?ここでの私のロジックは、idをnullにすることはできないと仮定して例外をスローするだけです。 –

答えて

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ですか? –

関連する問題