【问题标题】:mysql trigger: insert into another table if duplicatemysql触发器:如果重复则插入另一个表
【发布时间】:2012-05-23 02:14:01
【问题描述】:

这是我第一次使用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 ?

【问题讨论】:

    标签: mysql


    【解决方案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;
    

    声明一个日期时间数据类型的 var,因为我假设 date_time 列是日期时间类型。

    从新的魔术表中选择插入的 lpr_text 的 date_time 值,但其 date_time 与插入的不同。

    如果 var 为 null 表示未进行分配,并且 var 保留初始默认值 NULL,则使用 var 和插入的 lpr_text 在其他表中插入行

    【讨论】:

    • 感谢您的回复。当我尝试您的解决方案时,如果我插入一行包含表中已经存在的 lpr_text 的行,我会得到“1062 - 键 1 的重复条目 '1'”,你知道是什么原因造成的吗?再次感谢。
    • 很可能您在表中的该列上有一个主键或唯一键或唯一索引。在数据库架构中,一旦这些检查成功通过,才会触发触发器。你能检查一下并确认吗?如果问题仍然存在,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 2014-12-31
    • 2013-03-11
    • 2019-03-30
    • 2020-05-09
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多