2012-05-22 38 views
0

這是我第一次使用mysql和我正在學習如何使用觸發器。mysql觸發器:插入到另一個表中,如果重複

我有兩個表:lpr_upload和lpr_traveltime。 我lpr_upload表看起來像這樣

+----------+---------+--------+-----------+ 
| date_time | site_id | lane_id| lpr_text |     
+----------+---------+--------+-----------+ 

每當我添加一個新行到lpr_upload,我要檢查,如果新行的lpr_tex已經存在或者未在表中。如果它已經存在,我想用lpr_text和新的日期時間 - 舊的日期時間將新行添加到lpr_traveltime中。這是我到目前爲止有:

上重複鍵更新插入到lpr_opt_travel_times(TRAVEL_TIME的,lpr_text) 值(選擇TIMEDIFF(new.date_time,...),lpr_text)...

我不知道如何完成這一點。另外,我如何從表中已經存在的行獲取date_time?

回答

1

試試這個:

declare ldt_date_time datetime; 
select date_time into ldt_date_time from tbl where tbl.lpr_text = NEW.lpr_text and date_time <> NEW.date_time; 
if ldt_date_time is not null then 
    insert into lpr_opt_travel_times(travel_time, lpr_text) values (ldt_date_time, NEW.lpr_text); 
end if; 

宣告以日期時間數據類型的變種,因爲我認爲列DATE_TIME爲datetime型。

從NEW魔法表中選擇插入的lpr_text的date_time值,但其date_time與插入的不同。

如果VAR是空的意思沒有賦值發生和VAR保留NULL的初始默認值,然後插入使用var和插入的lpr_text

+0

感謝你回答您的其他表中的行。當我嘗試你的解決方案時,如果我在表中已經存在的lpr_text插入一行,我得到「1062 - 重複項1'爲關鍵1」,你知道什麼會導致這種情況嗎?再次感謝。 – help

+0

大多數情況下,您在表格中的該列上都有主鍵或唯一鍵或唯一索引。在數據庫體系結構中,一旦這些檢查成功傳遞,只有觸發器被觸發。你能檢查一下並確認嗎?請讓我知道如果問題仍然存在。 – somnath

相關問題