用于搜索和更新表记录的动态触发器

时间:2014-09-16 15:30:06

标签: mysql triggers phpmyadmin

我的目标是将操作作为下列操作:当用户单击一个“事件”时,服务器将在表A中使用eventIduserId的数据库中插入新条目。然后触发器启动,然后激活该插入语句,查看新行列eventId,然后搜索另一个表B,以匹配eventId列并在列{{1}上增加在表B的那个条目中。

我正在搜索源代码,但没有人深入了解如何创建一个触发器,该触发器将从插入行条目中读取列,在另一个表中搜索该ID并更新它。

是否有一种直接的方式来允许此触发器?

1 个答案:

答案 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)