Mysql';语句级';触发你可以用两个技巧来做

Mysql';语句级';触发你可以用两个技巧来做,mysql,triggers,Mysql,Triggers,我搜索了很多次,想找到一些技巧或解决方法,在MySQL中创建一个类似Oracle的“语句级”触发器,但我没有找到。所以我想出了这个诀窍,它对我有效,希望它能帮助任何人 请参阅下面的答案。假设我们想要插入多行,并且我们想要一次性执行某些操作,但我们无法避免MySQL触发器中的“每行” `insert to table1 (sname,age) VALUES ('mariam',5),('jojo',3),('ahmed',29)` 首先创建一个包含两列(ID,statementid)的表sta

我搜索了很多次,想找到一些技巧或解决方法,在MySQL中创建一个类似Oracle的“语句级”触发器,但我没有找到。所以我想出了这个诀窍,它对我有效,希望它能帮助任何人


请参阅下面的答案。

假设我们想要插入多行,并且我们想要一次性执行某些操作,但我们无法避免MySQL触发器中的“每行”

`insert to table1 (sname,age) VALUES ('mariam',5),('jojo',3),('ahmed',29)`
  • 首先创建一个包含两列(
    ID
    statementid
    )的表
    statementidstable
  • 其次,您必须使用软件为您的声明准备一个uniqe ID

  • 让我们说它是‘123456’

    把你的陈述改为

    将值('mariam',5123456),('jojo',3123456),('ahmed',29123456)插入表1(sname,年龄,唯一ID)

    完成后,从statementid表中删除statementid(用软件处理)

**另一个技巧是不需要statementid,触发器可以在仅插入第一行后触发一次,或者在仅插入最后一行后触发一次,或者同时触发两行

  • 在这个技巧中,你必须像这样准备你的陈述

      `insert to table1 (sname,age,rowid) VALUES ('mariam',5,1),('jojo',3,0),('dodo',3,0),('ahmed',29,-1)`
    
第一行的rowid=1(与任何其他行不同)使触发器知道在插入第一行后将触发一次

最后一行have rowid=-1(与任何其他行不同)使触发器知道在插入最后一行后将触发一次

其他行的rowid=0或任何其他值不在(1,-1)中

  • 每个把戏都有它自己的好处。。。请注意,第一个技巧可以处理“插入语句”和“更新语句”
  • 我仍在编写“删除语句”
  `insert to table1 (sname,age,rowid) VALUES ('mariam',5,1),('jojo',3,0),('dodo',3,0),('ahmed',29,-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;