2012-05-22 81 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

相关问题