【问题标题】:Dynamic Trigger to Search and Update Table Record搜索和更新表记录的动态触发器
【发布时间】:2014-11-10 10:36:45
【问题描述】:

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

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

有没有一种直接的方法来允许这个触发器?

【问题讨论】:

    标签: mysql triggers phpmyadmin


    【解决方案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)
    

    【讨论】:

    • 你是如何测试这个的?是否有允许测试的内置功能?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 2017-07-22
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    相关资源
    最近更新 更多