这将是失败的简单事情
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 ;
所以想法是首先检查点击表中是否有最后插入事件的条目,如果存在则将计数增加一个,否则在表中添加一个新条目
这里有一些测试
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)