Это будет failry просто что-то, как
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)
Как вы это проверить? Есть ли встроенная функция для тестирования? – Sauron
Нет. Я тестировал это на терминале mysql вручную. –