mysql触发器如何判断update某个表中具体指定的某个值发生变化时,触发方法。比如 当 article表中某条记录的size值发生变化时,才触发,当触发其他该记录的其他字段里的值时不触发?如何写?线上等求大侠帮忙

解决方案 »

  1.   

    这个只能在触发器内部判断,如果size未变,直接跳出,不处理。注册触发器的时候,只能注册针对某张表的INSERT/UPDATE/DELETE操作时触发。
      

  2.   

    http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html
    先看一下吧。Oracle之类的触发器都是一个道理,
    触发器主要有两个参数old,new,代表变化涉及到的某条记录的前后记录状态。
    注册触发器到某张表的某个/某些操作(INSERT/UPDATE/DELETE),并且能指定在操作实施前还是实施以后BEFORE/AFTER
    你的代码,就是根据判断变化前后的数据,决定是否要根据这次变化,对数据库的其他数据进行维护。比如,a_history这张表是a表的履历表,你就需要注册AFTER INSERT、AFTER UPDATE的时候,将new的记录copy到a_history又比如,client是客户信息表,里面有个字段是对应的销售人员,某个触发器就是判断如果当前的sales变化了,就对client_sales_relation这张表进行维护,修改之前的sales的结束时间为当前时间,新增一条记录,记录当前sales的开始时间。当然,上面举的触发器例子,也都可以通过在程序内部写代码来实现。
      

  3.   

    没有办法直接得到哪个字段被列在UPDATE语句中了。 你只能自己进行判断。 
    if new.col=old.col then ....
      

  4.   

    Idafang (Idafang)
      '截至2011-09-14 15:38:36  用户结帖率0.00% 
    当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
    http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
    http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html8、如何给分和结贴?
    http://community.csdn.net/Help/HelpCenter.htm#结帖
      

  5.   


    DROP TRIGGER t1.tr1;
    CREATE TRIGGER tr1 BEFORE INSERT
        ON t1 FOR EACH ROW
    begin
    if NEW.CreatedDate>now() then
    SET NEW.CreatedDate = IFNULL(NEW.CreatedDate, NOW()),
    NEW.LastModifiedDate = IFNULL(NEW.LastModifiedDate, NOW());
    end if
    end;