请问如何实现mysql的字段级触发器。   就是当一行记录中的某个字段更新了则执行语句,其他字段更新不执行。  找了很久也没找到语法。知道的麻烦告诉我一下,谢谢了。

解决方案 »

  1.   

    MySQL中触发器是行级的,只能在触发器中自行判断。
    if new.columnName != old.columnName then通过这种方式来确定是否执行相应的代码。
      

  2.   

    这种情况下,如果我update xx set  name= name,那不就判断不出来了?
      

  3.   

    用这中方式判断,只有当我原来的字段不为空的时候,更新该字段的值才会触发sql语句。 原来的字段为空,或者 把原来不为空的字段设为空值都不会触发sql语句。 这是为什么呢? 应该怎么该,谢谢。
      

  4.   

    对于空,你可以用 <=> 比较符。if not(new.columnName <=> old.columnName) then
    mysql> select null<=>null,null<=>1,1<=>1;
    +-------------+----------+-------+
    | null<=>null | null<=>1 | 1<=>1 |
    +-------------+----------+-------+
    |           1 |        0 |     1 |
    +-------------+----------+-------+
    1 row in set (0.52 sec)mysql>对于update xx set  name= name值没有变化的,则比较麻烦。不知道有没有什么好办法
      

  5.   


    我现在要监控该字段,只要它更新我就执行sql语句,但是如果它更新的值相同,那我就没办法判断了,这种情况还有办法吗?
      

  6.   

    old.f1=new.f1
    有两种情况:
    1、没有更新;
    2、有更新,值是一样的。
    字段中的值不变化,是判断不出来是属于哪种情况的
      

  7.   

    对于update xx set  name= name值没有变化的,则比较麻烦。不知道有没有什么好办法 能想到的方法就是监控mysql的日志,这样你可以知道什么时候,执行了什么SQL语句。
      

  8.   

    好吧,为什么mysql没有字段级触发器呢 真是郁闷了。