我的目标是将操作作为下列操作:当用户单击一个“事件”时,服务器将在表A中使用eventId
和userId
的数据库中插入新条目。然后触发器启动,然后激活该插入语句,查看新行列eventId
,然后搜索另一个表B,以匹配eventId
列并在列{{1}上增加在表B的那个条目中。
我正在搜索源代码,但没有人深入了解如何创建一个触发器,该触发器将从插入行条目中读取列,在另一个表中搜索该ID并更新它。
是否有一种直接的方式来允许此触发器?
答案 0 :(得分: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 ;
所以这个想法首先检查点击表中是否有最后一个插入事件的条目,如果它在那里然后将计数增加一个,那么在表格中添加一个新条目
以下是一些测试
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)