我在一个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
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
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传过来的数据,就限制不住了
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
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。