我多次搜索以找到任何技巧或解决办法来在MySQL中创建一个“语句级”触发器,就像甲骨文一样,但我没有找到。所以我想出了这个技巧,它对我有用,希望它可以帮助任何人
请参阅下面的答案。
答案 0 :(得分:0)
让我们说我们想插入多行,我们想要做一次但我们无法避免在MySQL触发器中“FOR EACH ROW”
`insert to table1 (sname,age) VALUES ('mariam',5),('jojo',3),('ahmed',29)`
statementidstable
,ID
)statementid
其次,你必须使用软件为你的陈述准备一个uniqe ID
让我们说'123456'。
将您的陈述更改为
INSERT INTO table1 (sname,age,uniqueid) VALUES ('mariam',5,123456),('jojo',3,123456),('ahmed',29,123456)
CREATE TRIGGER
table1_after_insert
AFTER INSERT
ON
table1
FOR EACH ROW
BEGIN
DECLARE isfired tinyint(1);
SELECT COUNT(statementid) INTO isfired from statementidstable where statementid=NEW.uniqeid LIMIT 1;
IF isfired = 0 THEN
'''DO WHAT YOU WANT HERE because this is the first time for this statement id
'''then insert the statementid to statementidstable
INSERT INTO statementidstable (statementid) VALUES (NEW.uniqeid)
ELSE
'''Nothing will happen becaue you already have the statement id in statementidstable
END IF;
END;
然后在完成后从statementidstable删除statementid(使用您的软件处理)
**你可以做到的另一个技巧,不需要状态,你的触发器只能在插入第一行后插入一次,或者在插入最后一行后插入或触发两次
在这个技巧中你必须像这样准备你的陈述
`insert to table1 (sname,age,rowid) VALUES ('mariam',5,1),('jojo',3,0),('dodo',3,0),('ahmed',29,-1)`
第一行有rowid = 1(不像任何其他行)使你的触发器知道它会在插入第一行后触发一次。
最后一行有rowid = -1(不像任何其他行)让你的触发器知道它会在插入最后一行后触发一次。
其他行的rowid = 0或任何其他值不在(1,-1)
中 CREATE TRIGGER
table1_after_insert
AFTER INSERT
ON
table1
FOR EACH ROW
BEGIN
IF rowid = 1 THEN
'''DO WHAT YOU WANT HERE after inserting first row only
ELSEIF rowid = -1
'''DO WHAT YOU WANT HERE after inserting last row only
ELSE
'''NOTHING WILL HAPPEN
END IF;
END;