【问题标题】:how to get value from select query in trigger in mysql5?如何从 mysql5 触发器中的选择查询中获取值?
【发布时间】:2011-06-29 19:33:52
【问题描述】:

如何从触发器中的选择查询中获取值并将该值插入到表中?

【问题讨论】:

    标签: mysql sql triggers


    【解决方案1】:

    对于 INSERT 触发器查询,您将使用对象 NEW
    对于 UPDATE 触发器查询,您将使用对象 OLD 和 NEW
    对于删除触发器查询,您将使用对象 OLD

    示例 1:如果您运行 INSERT INTO mytable (num) VALUES (10);
    在 INSERT 触发器中,您将该列引用为 NEW.num (10);

    示例 2:如果您运行 UPDATE mytable SET num = 41 WHERE num = 10;
    在 UPDATE 触发器中,您引用 OLD.num (10) 和 NEW.num (41)

    示例 3:如果您运行 DELETE mytable num = 104;
    在 DELETE 触发器中,您引用 OLD.num (104)

    使用这样的东西:

    DELIMITER $$
    
    create trigger my_trigger
    AFTER UPDATE on my_update_table
    for each row
    begin
    
        DECLARE P1,P2 VARCHAR(50);
    
        SELECT PRICENAME INTO P1 FROM PRICEIES WHERE PRICEID=OLD.PRICEID;
        SELECT PRICENAME INTO P2 FROM PRICEIES WHERE PRICEID=NEW.PRICEID;
        INSERT INTO AUDITLOG(OLDVALUE, NEWVALUE) VALUES (P1,P2);
    
    end $$
    
    DELIMITER ;
    

    【讨论】:

    • 但是对于 REQUISITION 表中的更新触发器,我有一个 PRICEID,我不必在 REQUISITION 表中使用 PRICENAME,我必须从 PRICES 表中获取 PRICENAME 并将 PRICENAME 插入 AUDITLOG 表中。怎么可能?
    • 记住,触发器可以写成存储过程。在 ON EACH ROW 设置后,BEGIN...END 构造并编写存储过程代码。
    • 如果我必须写“从 PRICEID=OLD.PRICEID 的价格中选择价格名称为 P1”、“从价格中价格 ID=新价格的价格中选择价格名称为 P2”,然后插入 AUDITLOG(OLDVALUE, NEWVALUE) VALUES (P1,P2) 怎么可能?
    • @Shooter 我刚刚在我的答案中添加了一个示例存储过程。
    猜你喜欢
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 2011-01-27
    • 2013-10-06
    • 2013-05-30
    • 1970-01-01
    相关资源
    最近更新 更多