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)
이 어떻게 테스트 했는가? 테스트를 허용하는 기능이 내장되어 있습니까? – Sauron
아니요. 수동으로 mysql 터미널에서이를 테스트했습니다. –