我有一张表sns_member里面有mobile,wathes两个字段,前一个是手机号,后一个是数量。还有一张表sns_member_watch,是里面有mobile,content,然后我想把member_watch表里面对应的moible的数量更新到member表的watches上去Create TRIGGER `memberTri` 
AFTER insert 
ON `sns_member` 
FOR EACH ROW
BEGIN 
DECLARE m INT;
declare cur Cursor for select mobile from sns_member;
open cur; 
REPEAT 
fetch cur INTO m;
declare @watchMembers int ;
set @watchMembers=(select count(*) from sns_watch_member where mobile=m); 
UPDATE sns_member SET watches = @watchMembers WHERE mobile = m; 
END REPEAT; 
close cur;
END;trigger

解决方案 »

  1.   

    在TRIGGER中不能对本表进行操作
      

  2.   

    那我改成对sns_watch_member监听,如果有新插入了或更新了,或删除了。都进行数量同步到sns_member表的watches字段里去呢!Create TRIGGER `memberTri` 
    AFTER insert,update,delete 
    ON `sns_member_watch` 
    FOR EACH ROW
    BEGIN 
    DECLARE m INT;
    declare cur Cursor for select mobile from sns_member;
    open cur; 
    REPEAT 
    fetch cur INTO m;
    declare @watchMembers int ;
    set @watchMembers=(select count(*) from sns_watch_member where mobile=m); 
    UPDATE sns_member SET watches = @watchMembers WHERE mobile = m; 
    END REPEAT; 
    close cur;
    END;
      

  3.   

    set @watchMembers=(select count(*) from sns_watch_member where mobile=m);  这个有没有问题呢
      

  4.   

    喔。那我单个写吧,如果是针对于insert的话
    Create TRIGGER `memberTri` 
    AFTER insert  
    ON `sns_member_watch` 
    FOR EACH ROW
    BEGIN 
    DECLARE m INT;
    declare cur Cursor for select mobile from sns_member;
    open cur; 
    REPEAT 
    fetch cur INTO m;
    declare @watchMembers int ;
    set @watchMembers=(select count(*) from sns_watch_member where mobile=m); 
    UPDATE sns_member SET watches = @watchMembers WHERE mobile = m; 
    END REPEAT; 
    close cur;
    END;运行后好像 提示这一句有错误哎set @watchMembers=(select count(*) from sns_watch_member where mobile=m); 
      

  5.   

    建议看看MYSQL的HELP
    DECLARE done INT DEFAULT 0;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
       
    select count(*) into @watchMembers from sns_watch_member where mobile=m; 
    在UPDATE语句后面
    SET done = 0;
      

  6.   

    Create TRIGGER `memberTri` 
    AFTER insert 
    ON `sns_member` 
    FOR EACH ROW
    BEGIN 
    DECLARE m INT;
    DECLARE done INT DEFAULT 0;
    declare cur Cursor for select mobile from sns_member ;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    open cur; 
    while done=0 do
    fetch cur INTO m;
    UPDATE sns_member SET watch_members = watch_members+1 WHERE mobile = m; 
    set done=0
    END while; 
    close cur;
    END;
      

  7.   

    Fetch cur INTO m;
    while done=0 do
    UPDATE sns_member SET watch_members = watch_members+1 WHERE mobile = m; 
     set done=0
    Fetch cur INTO m;
    END while; 
      

  8.   

    我换这种写法呢:
    Create TRIGGER `memberTri` 
    AFTER insert 
    ON `sns_member_watch` 
    FOR EACH ROW
    BEGIN 
    UPDATE sns_member SET watch_members = watch_members+1 WHERE mobile =NEW.mobile NEW.from_user_name; 
    END
    当sns_member_watch有数据时,就把对应的mobile所在的行的数据加1
      

  9.   

    MYSQL 但是数据库这个字段默认为NULL的int类型,只要把它改成默认为0的才能使触发器的生效即+1,
    有没有通过语句将它赋值为1的
      

  10.   

    BEGIN
    DECLARE done INT DEFAULT 0;
    declare c INT;
    declare cur Cursor for select watch_members from sns_member where mobile=NEW.from_user_name; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    open cur; 
    while done=0 do
    fetch cur INTO c;
    if c=NULL then
    UPDATE sns_member SET watch_members = 1 WHERE mobile = NEW.from_user_name; 
    else
    UPDATE sns_member SET watch_members = watch_members+1 WHERE mobile = NEW.from_user_name; 
    end if;
    end while;
    close cur;
    END
      

  11.   

    SET watch_members = IFNULL(watch_members,0)+1 
      

  12.   

    c=NULL 这一句好像不起效果哎,但实际上一开始这个值就是NULL