仅当不重复时才插入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很乐意帮忙:)