2014-03-31 39 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

相關問題