需要建一个触发器,在update表之后执行,及update表之后如果更新的那个字段的值小于0,则将其置为0
我这么写不对,请指教!
create trigger check_after_update_msclientmembercard
after update on ms_client_membercard
for each row
if new.remain_money < 0 then 
update ms_client_membercard set remain_money = 0 where client_id = new.client_id;

解决方案 »

  1.   

    delimiter $
    create trigger check_after_update_msclientmembercard
    after update on ms_client_membercard
    for each row
    begin
       if new.remain_money < 0 then 
          set new.remain_money=0;
       end if;
    end $
      

  2.   


    谢谢回复!
    我试了你的方法,但是报错“Updating of NEW row is not allowed in after trigger”
      

  3.   

    delimiter $
    create trigger check_after_update_msclientmembercard
    before update on ms_client_membercard
    for each row
    begin
       if new.remain_money < 0 then 
          set new.remain_money=0;
       end if;
    end $
      

  4.   

    create trigger check_after_update_msclientmembercard
    before update on ms_client_membercard
    for each row
    if new.remain_money < 0 then 
    set new.remain_money=0
      

  5.   

    多谢以上各位的回复!
    我想问如果用before的话,那还会在update ms_client_membercard后去再update remain_money < 0的记录为remain_money = 0吗,请指教!
      

  6.   


    这个,不是触发器了。
    使用触发器的,前提是:触发其中一表,而引起另一表的响应。
    即一定要有update,insert,delete发生,才行。否则,不能用。
      

  7.   

    谢谢!
    请问我这个触发器有什么问题,总是无法建立
    create trigger update_cardstatus_after_insert_clientinfo
    after insert on clienttradejour
    for each row
    if new.trade_item = '升级' then
    insert into  ms_client_promotion (client_id,client_name,promotion_time,after_card,receive_money,operator)
    select client_id,name,trade_time,card_type,receive_money,operator from clienttradejour where  client_id = new.client_id
      

  8.   

    加上 end if
    then
    看看报什么错误。
    此代码是可行的,再有错误,你使用排除法,找找。
      

  9.   


    create trigger update_cardstatus_after_insert_clientinfo
    after insert on clienttradejour
    for each row
    if new.trade_item = '升级' then
    insert into  ms_client_promotion (client_id,client_name,promotion_time,after_card,receive_money,operator)
    select client_id,name,trade_time,card_type,receive_money,operator from clienttradejour where  client_id = new.client_id麻烦帮我看看这个哪里有错啊,报错信息很少,看不出来
      

  10.   

    reate trigger update_cardstatus_after_insert_clientinfo
    after insert on clienttradejour
    for each row
    begin
    if new.trade_item = '升级' then
    insert into  ms_client_promotion (client_id,client_name,promotion_time,after_card,receive_money,operator)
    select client_id,name,trade_time,card_type,receive_money,operator from clienttradejour where  client_id = new.client_id
    end if;
    end;