【问题标题】:creating MySQL Trigger to insert into second table创建 MySQL 触发器以插入第二个表
【发布时间】:2020-01-28 02:20:51
【问题描述】:

我正在尝试设置一个触发器,以便在插入第一个表后将总和插入到第二个表中。

这些表格是:

  • 第一个表名:likes
  • 字段:feedid

  • 第二个表名:like_count

  • 字段:总计、feedid

likes 表上插入后,我需要检查feedid 是否存在于表like_count 中。如果不只是用total1 插入它。如果确实存在,我需要更新 like_count.total 以增加一 likes.feedid = like_count.feedid

【问题讨论】:

    标签: mysql triggers mysqladmin


    【解决方案1】:

    您可以使用 MySQL INSERT ... ON DUPLICATE KEY 语法来简化触发器的逻辑。

    为此,feedid 必须是表 likes_count 中的唯一列(它是列的主键,或者您需要在其上创建 UNIQUE 约束)。那么:

    DELIMITER //
    CREATE TRIGGER update_likes_count
    AFTER INSERT ON likes FOR EACH ROW
    BEGIN
        INSERT INTO likes_count (feed_id, total) VALUES (NEW.feedid, 1)
        ON DUPLICATE KEY UPDATE total = total + 1;
    END;
    //
    DELIMITER;
    

    【讨论】:

    • @FLcoder:抱歉有错字,应该是ON DUPLICATE KEY(没有尾随S)。我修复了代码并添加了文档链接。
    【解决方案2】:

    当然你必须改变数据库名称和熟练的列和插入语句

    DELIMITER //
    CREATE TRIGGER `databasename`.`update_feed_count`
    AFTER INSERT ON `likes` FOR EACH ROW
    BEGIN
        DECLARE @feedid  VARCHAR(20);
        SELECT feedid INTO @feedid FROM like_count WHERE feedid = NEW.feedid;
        IF @feedid IS NULL OR @feedid = '' THEN
            INSERT INTO like_count (total, feedid) VAKUES (1,NEW.feedid);
        ELSE
            UPDATE like_count lc 
                WHERE `total` = `total` + 1 
                AND NEW.feedid = vc.feedid;
        END IF;
    END;
    DELIMITER ;
    

    【讨论】:

      猜你喜欢
      • 2015-11-16
      • 2015-01-15
      • 1970-01-01
      • 2014-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      相关资源
      最近更新 更多