我在一个mysql的触发器里面这样写:
update table1 set a=NEW.a where b=NEW.b and c=0;
但是,c=0这个好像不起作用,我把相应记录的c更新为1,触发器还是会执行。而且会更新相应的记录。 
补充,触发器所在的表是MYISAM类型,而table1是INNODB类型,我的服务器mysql版本是: 5.0.77-log
Protocol version: 10

解决方案 »

  1.   

    给出你的create table , create trigger ,insert into 数据语句,这样别人可以在自己机器上模拟你的问题。
      

  2.   

    trigger是这样的。
    CREATE TRIGGER TgrRWS AFTER UPDATE ON RWS
     FOR EACH ROW BEGIN
      IF NEW.TRDPRC_1<>0 AND ABS(NEW.TRDPRC_1-OLD.TRDPRC_1)<OLD.TRDPRC_1*0.02 THEN
        UPDATE stock_info SET now=NEW.TRDPRC_1,rise_prise=NEW.NETCHNG_1,
    ,max=NEW.HIGH_1,min=NEW.LOW_1,up_time=NEW.`TRDTIM_1` WHERE code=NEW.CODE and get=0;
      END IF;
    END补充,我这台服务器是作为slave,就更新RWS这个表。
    如果是手动更新的话,get这个条件可以限制,但是如果是从master传过来的数据,就限制不住了
      

  3.   

    这个语句应该是直接报语法错误!CREATE TRIGGER TgrRWS AFTER UPDATE ON RWS
     FOR EACH ROW BEGIN
    IF NEW.TRDPRC_1 <>0 AND ABS(NEW.TRDPRC_1-OLD.TRDPRC_1) <OLD.TRDPRC_1*0.02 THEN
       UPDATE stock_info 
       SET now=NEW.TRDPRC_1,
       rise_prise=NEW.NETCHNG_1,,max=NEW.HIGH_1,
       min=NEW.LOW_1,up_time=NEW.`TRDTIM_1` 
       WHERE code=NEW.CODE and get=0;
    END IF;
    END两个连接的逗号。
    建议直接贴你实际的语句create table 
    insert into 
    create trigger
      

  4.   

    CREATE TABLE IF NOT EXISTS RWS (
      CODE varchar(10) NOT NULL,
      TRDPRC_1 double(10,4) NOT NULL,
      TRDVOL_1 bigint(20) NOT NULL,
      NETCHNG_1 double(10,4) NOT NULL,
      TRDTIM_1 varchar(10) NOT NULL,
      TRADE_DATE date NOT NULL,
      HIGH_1 double(10,4) NOT NULL,
      LOW_1 double(10,4) NOT NULL,
      BID double(10,4) NOT NULL,
      ASK double(10,4) NOT NULL,
      BIDSIZE varchar(11) NOT NULL,
      ASKSIZE varchar(11) NOT NULL,
      ACVOL_1 bigint(20) NOT NULL,
      IRGVAL bigint(20) NOT NULL,
      IRGPRC double(10,4) NOT NULL,
      NewTime timestamp NULL default NULL,
      UpTime timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
      PRIMARY KEY  (CODE)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;DELIMITER //
    CREATE TRIGGER TgrRWS1 AFTER UPDATE ON RWS
     FOR EACH ROW BEGIN
      IF NEW.TRDPRC_1<>0 AND ABS(NEW.TRDPRC_1-OLD.TRDPRC_1)<OLD.TRDPRC_1*0.02 THEN
        UPDATE info SET now=NEW.TRDPRC_1,rise_prise=NEW.NETCHNG_1,
    max=NEW.HIGH_1,min=NEW.LOW_1 WHERE code=NEW.CODE and get=0;
      END IF;
    END
    //
    DELIMITER ;CREATE TABLE IF NOT EXISTS info (
      stock_info_id bigint(20) NOT NULL auto_increment,
      code varchar(10) NOT NULL,
      stock_name varchar(200) default NULL,
      now double default 0.0,
      rise_prise double(10,4) NOT NULL,
      max double default NULL ,
      min double default NULL ,
      get tinyint(1) NOT NULL default '0' COMMENT '1不更新',
      PRIMARY KEY  (stock_info_id),
      KEY stock_code (code)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    INSERT INTO RWS(CODE,TRDPRC_1,TRDVOL_1,NETCHNG_1,TRDTIM_1,TRADE_DATE,HIGH_1,LOW_1,BID,ASK,BIDSIZE,ASKSIZE,ACVOL_1,IRGVAL,IRGPRC,NewTime,UpTime)VALUES ('DANGDANG','1.0378','0','1.0378','20:30','2010-01-04','1.0378','1.0378','1.0378','1.0378','2000','2000','20000','2000','2000',NOW(),CURRENT_TIMESTAMP);INSERT INTO info(code,now,rise_prise,max,min) VALUES('DANGDANG',0.0,0.0,0,0);RWS表只有更新操作,所有的更新都是采用master---slave。