希望能在update某一字段时被触发,mysql可以支持吗?谢谢!

解决方案 »

  1.   

    谢谢答复!
    怎么写呢?一般的触发器是这样:REATE TRIGGER triggername AFTER UPDATE on tablename
    FOR EACH ROW,想指到具体的字段怎么写呢?
    我看以前的一些贴子用update(字段名)来判断,可我试过了,mysql不认。
      

  2.   

    CREATE TRIGGER upd_check BEFORE UPDATE ON account
    FOR EACH ROW
    BEGIN
     IF NEW.amount < 0 THEN
          SET NEW.amount = 0;
     ELSEIF NEW.amount > 100 THEN
     SET NEW.amount = 100;
     END IF;
      END;
      

  3.   

    可是这样写只要account表中的任一字段被改变就会被触发,只是触发后只判断amount值。如果想要下面这种效果怎么写呢?
    例原来amount值为1,当它被改为2时被触发,且只有它改变时才会被触发,其它字段改变时不会被触发
      

  4.   

    补充一下,或者是其它字段也能被触发,但能取到amount的原来值,将它和现在比较一下,如果不一定再做相应的操作,一样的话,触发器退也,这样也可以达到一样的效果。
    再次谢谢回复!
      

  5.   

    update 的时候可以使用old引用更新前的某一行的列。
    你如果想单独一个字段更新才触发的话,现在mysql应该还不行。
      

  6.   


    DELIMITER |
    CREATE TRIGGER trg_CheckApplyStock BEFORE UPDATE ON t_ApplyStock
        FOR EACH ROW BEGIN
            IF  OLD.F_Check=0 && NEW.F_Check=1  THEN
            
      IF EXISTS(SELECT top 1 * FROM t_StockOrderDetail a,inserted b WHERE a.F_LinkBill = b.F_BillID)
      
         ROLLBACK TRANSACTION
         
         raiserror('本单已被采购订单引用,不能反审!!',18,18)
         END IF;
        END IF;    |
    DELIMITER ;这是改后的代码,现在的问题是 IF EXISTS(SELECT top 1 * FROM t_StockOrderDetail a,inserted b WHERE a.F_LinkBill = b.F_BillID) THEN
    和raiserror('本单已被采购订单引用,不能反审!!',18,18)
    不能通过
      

  7.   

    不能仅根据某一列来触发,只能根据行来触发。
    类似的功能,一般是在触发器中判断一下这一列的值是否有变量。比如在 update触发器中if new.col = old.col 则代表这一列没有更新。