触发从另一个表插入值 - Mysql

时间:2014-03-31 10:22:19

标签: mysql triggers

当温度高于或低于设置警报的参数时,我这样做是为了触发。即自动填充表格警报的字段。

现在我在表中创建了一个新的警报,idRegisto是外键,现在我希望id按照idRegisto其他对应的表完成。

有人可以帮我吗?

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

谢谢。

------------ 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 @maxidAlarme=@maxidAlarme+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 @maxidAlarme=@maxidAlarme+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

1 个答案:

答案 0 :(得分:2)

您可以使用“插入后触发器”

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是registro表的主键(将由您的应用程序或通过自动增量自动生成)。

注册 - &gt;如果值更高/更低阈值 - &gt;触发警报 - &gt;插入sensores_tem_alarmes