我有兩個表和一個觸發器。 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