2014-03-31 80 views
0

我这样做是为了在温度高于或低于参数设置报警时触发。即自动填充表格警报的字段。从另一个表中插入值的触发器 - Mysql

现在我在表格报警中创建了一个新行,idRegisto是外键,现在我要根据idRegisto对应的表完成该id。

有人可以帮我吗?

如果你不理解这个问题,我会试着进一步澄清。

谢谢。

------------ TRIGGER -------------------

DELIMITER $$ 
create TRIGGER alerta 
BEFORE INSERT ON registos 
FOR EACH ROW 
begin 
Set @tempmax=0; 
Set @tempmin=0; 
Set @hummax=0; 


select lim_inf_temp, lim_sup_temp into @tempmin, @tempmax from sensores where idSensor=NEW.idSensor; 


Set @maxidAlarme=0; 
if (CAST(NEW.Temperatura AS UNSIGNED)<@tempmin) then 
SELECT MAX(idAlarme) into @maxidAlarme FROM alarmes; 
SET @[email protected]+1; 
INSERT INTO alarmes(idAlarme,descricao_alarme) VALUES (@maxidAlarme,"high-temperature"); 
INSERT INTO sensores_tem_alarmes(idSensor,idAlarme,dataAlarme) VALUES  (NEW.idSensor,@maxidAlarme,NOW()); 
end if; 


if (CAST(NEW.Temperatura AS UNSIGNED)>@tempmax) then 
SELECT MAX(idAlarme) into @maxidAlarme FROM alarmes; 
SET @[email protected]+1; 
INSERT INTO alarmes(idAlarme,descricao_alarme) VALUES (@maxidAlarme,"lower temperature"); 
INSERT INTO sensores_tem_alarmes(idSensor,idAlarme,dataAlarme) VALUES (NEW.idSensor,@maxidAlarme,NOW()); 
end if; 
DELIMITER ; 

------- ----- ER ------------------------

enter image description here

回答

2

您可以使用 “INSERT触发器后”

AFTER INSERT ON registos

并且在填充报警表时将“New.IdRegistro”用作外键。使用 代码:

//编辑

AFTER INSERT ON registos 
FOR EACH ROW 
begin 
Set @tempmax=0; 
Set @tempmin=0; 
Set @hummax=0; 

...

INSERT INTO alarmes(idAlarme,descricao_alarme,idRegistro) VALUES (@maxidAlarme,"lower temperature",New.IdRegistro); 

INSERT INTO sensores_tem_alarmes(idSensor,idAlarme,dataAlarme) VALUES (NEW.idSensor,@maxidAlarme,NOW()); 

...

我这里假设IdRegistro是主键(这将是由您的应用程序或通过自动增量自动生成)注册表。

注册 - >如果价值更高/更低的阈值 - >触发报警 - >插入sensores_tem_alarmes

+0

谢谢fpr回复。你能以最实际的方式解释吗? – user3320956

+0

感谢您的帮助。完美的作品:) – user3320956

相关问题