2014-09-16 2 views
0

사용자가 하나의 "이벤트"를 클릭하면 서버는 테이블 A에 eventIduserId이라는 새 항목을 데이터베이스에 삽입합니다. 트리거는 활동하기 시작하고 새 행 열 eventId 보면 다음 테이블 B에 대한 해당 항목에서 열 numberClicks에 그 eventId 및 증가에 맞게 다른 테이블, B를, 검색, 그 삽입 문에 활성화 할테이블 레코드 검색 및 업데이트를위한 동적 트리거

나는 근원을 찾고 있었지만 아무도 삽입 행 항목에서 열을 읽고 해당 ID에 대한 다른 테이블을 검색하여 업데이트하는 방아쇠를 만드는 것에 대한 통찰력을 제공하지 못했습니다.

이 트리거를 허용하는 간단한 방법이 있습니까?

답변

1

delimiter // 
    create trigger number_clicks after insert on event 
    for each row 
    begin 
    declare click_count int default 0 ; 
    select count(*) 
    into click_count 
    from clicks 
    where eventId = new.eventId ; 

    if click_count > 0 then 
     update clicks set numberClicks = numberClicks + 1 where eventId = new.eventId ; 
    else 
     insert into clicks (eventId , numberClicks) values (new.eventId,1); 
    end if; 
    end ;// 
delimiter ; 

마지막 삽입 된 이벤트에 대한 항목이 있다면 그래서 아이디어는 클릭 테이블에 먼저 확인은하고이 다음 중 하나에 의해 수를 증가하면 다른 추가로이 failry 간단한 일이 될 것입니다 테이블 여기

에 새 항목이 몇 가지 테스트입니다

mysql> create table event (eventId int,userId int); 
Query OK, 0 rows affected (0.06 sec) 

mysql> create table clicks(eventId int , numberClicks int); 
Query OK, 0 rows affected (0.08 sec) 

mysql> insert into event values (1,1); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from clicks ; 
+---------+--------------+ 
| eventId | numberClicks | 
+---------+--------------+ 
|  1 |   1 | 
+---------+--------------+ 
1 row in set (0.00 sec) 

mysql> insert into event values (1,2); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from clicks ; 
+---------+--------------+ 
| eventId | numberClicks | 
+---------+--------------+ 
|  1 |   2 | 
+---------+--------------+ 
1 row in set (0.00 sec) 

mysql> insert into event values (2,4); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from clicks ; 
+---------+--------------+ 
| eventId | numberClicks | 
+---------+--------------+ 
|  1 |   2 | 
|  2 |   1 | 
+---------+--------------+ 
2 rows in set (0.00 sec) 

mysql> insert into event values (2,5); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from clicks ; 
+---------+--------------+ 
| eventId | numberClicks | 
+---------+--------------+ 
|  1 |   2 | 
|  2 |   2 | 
+---------+--------------+ 
2 rows in set (0.00 sec) 
+0

이 어떻게 테스트 했는가? 테스트를 허용하는 기능이 내장되어 있습니까? – Sauron

+0

아니요. 수동으로 mysql 터미널에서이를 테스트했습니다. –

관련 문제