2015-07-21 24 views
0

我有一个代码触发器之前插入MySQLfor过滤器数据,但它不起作用。这是逻辑的我的代码,如果new.suhu_udara> 30 new.suhu_udara - old.suhu_udara < 10然后设置new.suhu_udara = NULL如何使用触发器的mysql过滤器

USE `cuaca_maritim`; 
DELIMITER $$ 
DROP TRIGGER IF EXISTS cuaca_maritim.filter$$ 
USE `cuaca_maritim`$$ 
CREATE DEFINER=`root`@`localhost` TRIGGER `filter` BEFORE INSERT ON data_cuaca` FOR EACH ROW 
if(new.suhu_udara < 21.5 or new.kelembaban_udara < 22 or new.tekanan_udara < 1002.4) then 
Set new.suhu_udara = null ; 
elseif (new.suhu_udara > 37.6 or new.kelembaban_udara > 100 or new.tekanan_udara >1018.9 or new.kecepatan_angin > 44) then 
Set new.kelembaban_udara = null ; 
end if$$ 
DELIMITER ; 
USE `cuaca_maritim`; 

DELIMITER $$ 

DROP TRIGGER IF EXISTS cuaca_maritim.data_cuaca_AFTER_UPDATE$$ 
USE `cuaca_maritim`$$ 
CREATE DEFINER = CURRENT_USER TRIGGER `cuaca_maritim`.`data_cuaca_AFTER_UPDATE` AFTER UPDATE ON `data_cuaca` FOR EACH ROW 
if (old.suhu_udara - new.suhu_udara > 10) then 
set new.suhu_udara=null ; 
end if 
$$ 
DELIMITER ; 

你能帮MEX这个代码?

+0

最新错误? –

回答

0

您没有使用正确的触发功能,谢谢。插入触发器什么是OLD.suhu_udara?

旧。值只在更新查询中。

请检查触发功能,我认为你应该在这里使用更新。

+0

在INSERT触发器中,只能使用NEW.col_name;没有旧的行。在DELETE触发器中,只能使用OLD.col_name;没有新的行。在UPDATE触发器中,可以使用OLD.col_name在更新之前引用行的列,并使用NEW.col_name引用行更新后的列。但我尝试在更新之前使用old.value它不起作用 – Tia

+0

您提到在触发器语法中插入之前,将其更改为更新后.. –