仅当不重复时才插入mysql触发器

仅当不重复时才插入mysql触发器,mysql,triggers,Mysql,Triggers,我对使用触发器事件来获得预期结果有点困惑 这里的主表是费用。结构如下 费用 id | rn | fid | amount | f_month | year ==================================================== 1 | 1 | 1 | 150000 | 1 | 1 2 | 1 | 2 | 50000 | 1 | 1 3 |

我对使用触发器事件来获得预期结果有点困惑

这里的主表是
费用
。结构如下

费用

id  |   rn  |   fid |   amount  |   f_month |   year
====================================================
1   |   1   |   1   |   150000  |   1       |   1
2   |   1   |   2   |   50000   |   1       |   1
3   |   2   |   1   |   550500  |   2       |   1
4   |   2   |   2   |   200     |   2       |   1
5   |   3   |   1   |   550500  |   2       |   1
inv |   rn  |   y_d |   status  
==============================
1   |   1   |   1   |   0
2   |   1   |   1   |   0
3   |   2   |   1   |   0
4   |   2   |   1   |   0
5   |   3   |   1   |   0
inv |   rn  |   y_d |   status  
==============================
1   |   1   |   1   |   0
2   |   2   |   1   |   0
3   |   3   |   1   |   0
使用了简单插入触发器

DROP TRIGGER IF EXISTS `insertinv`;
CREATE DEFINER=`root`@`localhost` TRIGGER `insertinv`
AFTER INSERT ON `fee` FOR EACH ROW INSERT INTO invoice VALUES(null, NEW.rn, NEW.year, '') 
我得到的输出是什么

发票

id  |   rn  |   fid |   amount  |   f_month |   year
====================================================
1   |   1   |   1   |   150000  |   1       |   1
2   |   1   |   2   |   50000   |   1       |   1
3   |   2   |   1   |   550500  |   2       |   1
4   |   2   |   2   |   200     |   2       |   1
5   |   3   |   1   |   550500  |   2       |   1
inv |   rn  |   y_d |   status  
==============================
1   |   1   |   1   |   0
2   |   1   |   1   |   0
3   |   2   |   1   |   0
4   |   2   |   1   |   0
5   |   3   |   1   |   0
inv |   rn  |   y_d |   status  
==============================
1   |   1   |   1   |   0
2   |   2   |   1   |   0
3   |   3   |   1   |   0
但我想申请条件

如果
fee.rn
fee.f\u月
fee.year
相同,则停止插入。我的意思是忽略
费用.fid

并取得以下成果。期待中的

发票

id  |   rn  |   fid |   amount  |   f_month |   year
====================================================
1   |   1   |   1   |   150000  |   1       |   1
2   |   1   |   2   |   50000   |   1       |   1
3   |   2   |   1   |   550500  |   2       |   1
4   |   2   |   2   |   200     |   2       |   1
5   |   3   |   1   |   550500  |   2       |   1
inv |   rn  |   y_d |   status  
==============================
1   |   1   |   1   |   0
2   |   1   |   1   |   0
3   |   2   |   1   |   0
4   |   2   |   1   |   0
5   |   3   |   1   |   0
inv |   rn  |   y_d |   status  
==============================
1   |   1   |   1   |   0
2   |   2   |   1   |   0
3   |   3   |   1   |   0
在触发表中,inv是主键,自动递增
  • 检查匹配的
    年份
    注册号
    是否存在
    库存
  • 如果不存在,则使用
    insert
    语句
  • 请执行以下操作:

    DELIMITER $$
    DROP TRIGGER IF EXISTS `insertinv` $$
    
    CREATE DEFINER=`root`@`localhost` TRIGGER `insertinv`
    AFTER INSERT ON `fee` 
    FOR EACH ROW 
      BEGIN
    
        /* Declare a variable to store invoice id for matching year and rn */
        DECLARE inv_exists INT(11) DEFAULT 0;
    
        /* Fetch the invoice id if exists */
        SELECT inv INTO inv_exists 
        FROM invoice 
        WHERE rn = NEW.rn AND 
              y_d = NEW.year; 
    
        /* if no invoice exists then insert into the table */
        IF NOT(inv_exists > 0) THEN 
    
            /* Insert statement */
            INSERT INTO invoice VALUES(null, NEW.rn, NEW.year, '') ;
    
        END IF;
    END $$
    DELIMITER ;
    

    您的触发器语法看起来不正常。你只给了伪代码吗?@MadhurBhaiya,我编辑过,这就是你的意思,不是吗?不,在问题中给你写完整的触发器语句。您当前的触发器是否在执行某些操作?@MadhurBhaiya,当前触发器正在工作,我已经发布了结果-第一张发票表,但我期望的是最后一张发票table@AnandHmt请核对答案。由于您没有在发票表上的月份,我不能考虑它。您的答案不仅解决了我的问题,但也认识到我的结构是错误的,我发现我的表结构必须修改。巨大的!!!尊重你的指导方针。请编辑答案
    中的打字错误,如果
    结束,分号
    结束之前丢失。再次感谢。@AnandHmt很乐意帮忙:)