我有两个表和一个触发器。 UPDATE上的触发器失败,表传感器。我已经测试触发器更新另一个表,并且工作正常,所以我期望这是锁定在传感器上的问题。我当然不是mySQL的专家,我做了一些搜索。我曾尝试在触发器中的第一个SELECT之前添加SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
,但这没有任何区别。mySQL触发器在UPDATE语句上失败
表测量:
CREATE TABLE `measurements` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`sensorid` int(16) DEFAULT NULL,
`ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`distance` int(11) NOT NULL,
`temperature` float DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=26727 DEFAULT CHARSET=latin1;
表传感器:
CREATE TABLE `sensors` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` char(32) DEFAULT '',
`zeropoint` int(11) unsigned DEFAULT NULL,
`threshold` int(11) unsigned DEFAULT NULL,
`hysteresis` int(11) DEFAULT NULL,
`status` enum('normal','alarm') DEFAULT 'normal',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
触发加注报警:
CREATE TRIGGER `raise alarm` BEFORE INSERT ON `measurements`
FOR EACH ROW
begin
declare zp integer;
declare st char(32);
select zeropoint into zp from sensors where id = new.sensorid;
select status into st from sensors where id = new.sensorid;
if new.distance > zp then
if st = 'normal' then
update sensors set status = 'alarm' where id = new.sensorid;
end if;
end if;
end;
失败**如何**? – 2015-03-31 15:12:29
@OP:将错误堆栈详细信息添加到您的帖子。 – 2015-03-31 15:13:37
失败在于记录未插入表格度量中。 – 2015-03-31 15:21:18