2015-07-21 23 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

您提到在觸發器語法中插入之前,將其更改爲更新後.. –