[英]Trigger to insert values from another table - Mysql
當溫度高於或低於設置警報的參數時,我這樣做是為了觸發。 即自動填充表格警報的字段。
現在我在表中創建了一個新的警報,idRegisto是外鍵,現在我希望id按照idRegisto其他對應的表完成。
有人能幫幫我嗎?
如果您不理解這個問題,我會嘗試進一步澄清。
謝謝。
- - - - - - 觸發 - - - - - - - - - -
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 ------------------------
您可以使用“插入后觸發器”
在 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表的主鍵(將由您的應用程序或通過自動增量自動生成)。
注冊 - >如果值更高/更低閾值 - >觸發警報 - >插入sensores_tem_alarmes
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.